Questions tagged «shell-builtin»

内置的Shell是从Shell调用的命令,直接在Shell本身中执行。



4
内置命令与非内置命令有什么区别?
内置命令和另一个名义上可以做相同事情的命令之间有本质上的区别吗? 例如。内建函数是否获得“特殊”待遇?...运行它们的开销较少吗?..或者它们只是简单地“内置”;像您的汽车仪表板? ...并且这些内置函数有明确的列表(当前列表)吗?

4
为什么`[`是shell内置的,而`[[`是shell的关键字?
据我所知,[[是的增强版本[,但是当我看到它[[作为关键字并[显示为内置函数时,我感到困惑。 [root@server ~]# type [ [ is a shell builtin [root@server ~]# type [[ [[ is a shell keyword TLDP说 内建函数可能是同名系统命令的同义词,但是Bash在内部重新实现它。例如,Bash echo命令与/ bin / echo不同,尽管它们的行为几乎相同。 和 关键字是保留字,令牌或运算符。关键字对shell具有特殊的含义,并且确实是shell语法的组成部分。举例来说,for和while都做!是关键字。类似于内置命令,关键字被硬编码到Bash中,但是与内置命令不同,关键字本身不是命令,而是命令构造的子单元。[2] 那不是既可以作为关键字[又可以[[作为关键字吗?我在这里想念什么吗?同样,此链接再次确认[和[[应该属于同一种类。

8
为什么POSIX强制性实用程序未内置在Shell中?
这个问题的目的是回答好奇心,而不是解决特定的计算问题。问题是:为什么POSIX强制实用程序通常不内置在Shell实现中? 例如,我有一个脚本,该脚本基本上读取一些小的文本文件并检查它们的格式是否正确,但是由于大量的字符串操作,在我的计算机上运行该脚本需要27秒。通过调用各种实用程序,此字符串操作使成千上万的新进程变慢了。我非常相信,如果一些工具,建于,即grep,sed,cut,tr,和expr,那么脚本会在第二或更小(根据我用C的经验)。 似乎在许多情况下,构建这些实用程序都会使Shell脚本中的解决方案是否具有可接受的性能产生差异。 显然,有一个选择不内置这些实用程序的原因。也许在系统级别使用一个实用程序版本可以避免各种外壳使用该实用程序的多个不相等版本。我真的想不出很多其他原因来保持创建这么多新流程的开销,并且POSIX对实用程序进行了足够的定义,只要它们各自是POSIX,那么使用不同的实现就似乎不是什么大问题符合。至少没有这么多流程的低效率那样大的问题。

7
内置的冒号有什么作用?
我已经破解了许多shell脚本,有时最简单的事情使我感到困惑。今天,我遇到了一个脚本,该脚本大量使用了:内置的(冒号)bash。 该documenation似乎很简单: : (a colon) : [arguments] 除了扩展参数和执行重定向之外,什么也不要做。返回状态为零。 但是,我以前仅在用于shell扩展的演示中看到过这种用法。我遇到的脚本中的用例广泛使用了此结构: if [ -f ${file} ]; then grep some_string ${file} >> otherfile || : grep other_string ${file} >> otherfile || : fi 实际上有几百个抱怨,但更多的是相同的。除了上面的简单结构之外,没有输入/输出重定向。稍后在脚本中不检查返回值。 我将其视为无用的构造体,上面写着“或者什么也不做”。以“或什么都不做”来结束这些抱怨有什么目的?在什么情况下,这种构造会导致与简单地|| :从所有实例中删除结果不同的结果?

1
了解`compgen`内置命令
来自help compgen: $ help compgen compgen: compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word] Display possible completions depending on the options. Intended to be used from within a shell function generating possible completions. If the optional WORD …


6
“ cat”是内置的shell还是外部程序?
当我使用type命令查找cat是内置的Shell还是外部程序时,我得到以下输出: -$ type cat cat is hashed (/bin/cat) -$ 这是否意味着cat是一个外部程序/bin/cat? 我很困惑,因为当我检查下面的输出时,echo我发现它既是built-in程序又是程序/bin/echo -$ type echo echo is a shell builtin -$ which echo /bin/echo -$ 因此,我无法使用/bin/cat必然意味着外部程序的逻辑,因为echo是/bin/echo但仍是内置的。 那么我怎么知道是什么cat呢?内置还是外部?
33 bash  cat  echo  shell-builtin 

5
使bash使用外部`time`命令而不是内置的shell
如何让bash默认使用时间二进制(/ usr / bin / time)而不是shell关键字? which time收益/usr/bin/time type time回报time is a shell keyword 运行time显然是执行外壳关键字: $ time real 0m0.000s user 0m0.000s sys 0m0.000s $ /usr/bin/time Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose] [--portability] [--format=format] [--output=file] [--version] [--quiet] [--help] command [arg...] enable -n time 退货 bash: enable: time: not …

2
bash`suspend`内置命令的目的是什么?
我输入help suspend并得到以下简短说明: suspend: suspend [-f] Suspend shell execution. Suspend the execution of this shell until it receives a SIGCONT signal. Unless forced, login shells cannot be suspended. Options: -f force the suspend, even if the shell is a login shell Exit Status: Returns success unless job control is not enabled …

2
为什么POSIX要求某些Shell内置程序具有外部实现?
从这个关于printf是否是yash内置的问题开始,这个答案引用了POSIX标准。 答案指出,POSIX搜索序列是查找所需命令的外部实现,然后,如果外壳将其实现为内置程序,则运行内置程序。(对于不是特殊内置的内置。) 为什么POSIX在允许运行内部实现之前对存在外部实现有此要求? 似乎……随心所欲,所以我很好奇。

5
在文件中写入“时间”的输出,为什么需要括号?
time写入stderr,因此可以假设添加2>&1到命令行应该将其输出路由到stdout。但这不起作用: test@debian:~$ cat file one two three four test@debian:~$ time wc file > wc.out 2>&1 real 0m0.022s user 0m0.000s sys 0m0.000s test@debian:~$ cat wc.out 1 4 19 file 仅在括号中有效: test@debian:~$ (time wc file) > wc.out 2>&1 test@debian:~$ cat wc.out 1 4 19 file real 0m0.005s user 0m0.000s sys 0m0.000s 在这种情况下为什么需要括号?为什么不time …

6
使用系统命令而不是内置的Bash而不指定完整路径
我使用Bash作为我的交互式外壳,我想知道是否有一种简单的方法可以使Bash在共享相同名称的情况下运行系统命令而不是外壳内置命令。 例如,使用系统kill(from util-linux)打印指定进程的进程ID(pid),而不发送信号: $ /bin/kill -p httpd 2617 ... 在不指定系统命令的完整路径的情况下,将使用Bash内置函数代替系统命令。该kill内建不具备-p这样的命令失败选项: $ kill -p httpd bash: kill: p: invalid signal specification 我尝试了使bash使用外部`time`命令而不是内置的shell列出的答案,但是它们中的大多数只能使用,因为time实际上是一个shell 关键字 –而不是内置的shell。 除了暂时禁用内置的Bash之外enable -n kill,到目前为止,我所看到的最佳解决方案是使用: $(which kill) -p httpd 是否有其他更简单的方式(较少的输入操作)来执行外部命令而不是内置的Shell? 请注意,这kill只是一个示例,我想要一个通用的解决方案,类似于使用command内置前缀防止运行与外部命令同名的函数的方式。在大多数情况下,我通常更喜欢使用内置版本,因为它节省了创建新进程的时间,并且有时内置功能具有外部命令所没有的功能。

1
哪里和哪里有什么区别
where和whichshell命令有什么区别?这里有些例子 ~ where cc /usr/bin/cc /usr/bin/cc ~ which cc /usr/bin/cc 和 ~ which which which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' /usr/bin/which ~ which where /usr/bin/which: no where in (/usr/local/bin:/bin:/usr/bin:/home/bnikhil/bin:/bin) 也 ~ where which which: aliased to alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde which: shell built-in command /usr/bin/which /usr/bin/which …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.