小编A. *_*dry的帖子

Shell Scripting中命令`command`与命令`builtin`之间的区别

我知道该命令command是在最新的 POSIX 标准中指定的,而builtin不是。我也意识到这两个命令都是常规的内置命令(即它们可以被用户定义的函数覆盖)。一些外壳定义了builtin,但不是全部(例如dash没有)。我想了解为什么builtin在某些 shell 中引入。

据我所知,builtin只会返回特殊的然后是常规的内置函数,但是command会返回特殊的内置函数,然后是常规的内置-p函数,然后是路径上的命令(并且可以使用开关command来指定它使用外壳定义的默认值$PATH,以防用户修改$PATH)。

例如,在 中mksh,我看到以下内容:

注意: mksh从 repo 安装在 Ubuntu 20.04 上http://archive.ubuntu.com/ubuntu focal/universe amd64 mksh amd64 58-1

$ echo $KSH_VERSION
@(#)MIRBSD KSH R58 2020/03/27
$ which -a echo
/usr/bin/echo
/bin/echo
$ which -a printf
/usr/bin/printf
/bin/printf
$ type echo
echo is a shell builtin
$ …
Run Code Online (Sandbox Code Playgroud)

history shell-builtin command

5
推荐指数
1
解决办法
94
查看次数

在 Shell 中获取函数的长度

更新:

一些背景:

zsh在函数内部调用时返回函数内部的行号$LINENO。我需要一种方法来获取文件中的行号并区分何时zsh给我文件行号与函数行号。

我找不到一个zsh环境变量来改变这种行为以匹配其他 Bourne shell(例如bash总是给出文件行号),所以我试图看看我是否可以创建一个具有逻辑的函数,不管它总是输出文件行号的上下文。这就是为什么我试图确定函数的长度。

如果任何人的一个好办法知道与获取文件的行号$LINENOzsh所有环境中,我将不胜感激!


题:

我已经搜索了thisthis,但似乎找不到答案。是否有一种可移植的方法来编写函数定义的行数?(请参阅上面的“一些背景”。)

我最初的想法是捕获函数内容并将其通过管道传输到wc -l.

考虑以下测试文件:

测试文件:

#! /bin/sh
#
# test_file.sh

func1() { echo 'A one-liner'; }  # With a nasty comment at the end
func2 (){
  echo "A sneaky } included"
  # Or an actual code block
  {
    echo 'hi'
    echo 'there'
  }
}

func3() { echo "I'm on a line."; }; …
Run Code Online (Sandbox Code Playgroud)

shell sed awk

2
推荐指数
1
解决办法
211
查看次数

标签 统计

awk ×1

command ×1

history ×1

sed ×1

shell ×1

shell-builtin ×1