相关疑难解决方法(0)

使用系统命令而不是 Bash 内置命令而不指定完整路径

我使用 Bash 作为我的交互式 shell,我想知道是否有一种简单的方法让 Bash 在它们共享相同名称的情况下运行系统命令而不是 shell 内置命令。

例如,使用系统kill(from util-linux) 打印指定进程的进程 ID (pid) 而不是发送信号:

$ /bin/kill -p httpd
2617
...
Run Code Online (Sandbox Code Playgroud)

在不指定系统命令的完整路径的情况下,使用 Bash 内置命令代替系统命令。该kill内建不具备-p这样的命令失败选项:

$ kill -p httpd
bash: kill: p: invalid signal specification
Run Code Online (Sandbox Code Playgroud)

我尝试了Make bash use external `time` command 而不是shell builtin 中列出的答案但它们中的大多数只能工作,因为time实际上是 shell关键字- 而不是 shell builtin

除了暂时禁用内置的 Bash 之外enable -n kill,到目前为止我见过的最好的解决方案是使用:

$(which kill) -p httpd
Run Code Online (Sandbox Code Playgroud)

是否有其他更简单(涉及较少输入)的方法来执行外部命令而不是内置的 shell?

请注意,这kill …

bash shell-builtin

18
推荐指数
1
解决办法
2608
查看次数

在文件中写入`time`的输出,为什么需要括号?

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
Run Code Online (Sandbox Code Playgroud)

只有括号才有效:

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
Run Code Online (Sandbox Code Playgroud)

为什么在这种情况下需要括号?为什么不被time wc解释为一个单一的命令?

io-redirection shell-builtin

18
推荐指数
2
解决办法
2437
查看次数

在 bash 中使用内置的“time”命令而不是外部命令

使用该time命令时,我遇到了一种情况,我应该使用内置time而不是外部 GNU 时间命令/usr/bin/time。那么,我该怎么做呢?我在某处看到使用enable和/或command会有所帮助,但他们没有。

这是一个用例:

watch "time ls"
Run Code Online (Sandbox Code Playgroud)

它使用/usr/bin/time我不想要的外部命令!time当我time ls在终端上运行时调用内部 bash 函数时会发生这种情况,如下所示:

$ time ls
Run Code Online (Sandbox Code Playgroud)

请注意,这里已经回答了完全相反的请求:

两个命令有很多区别。内部time更精确(我想要),但外部命令有更多选项(我不需要)。

bash shell-builtin time-utility

13
推荐指数
1
解决办法
3959
查看次数

关键字、保留字和内置字之间的区别?

Make bash use external `time` 命令而不是 shell built-in,Stéphane Chazelas 写道:

没有time内置 bash。time是一个关键字,所以你可以做例如time { foo; bar; }

我们可以验证一下:

$ type -a time
time is a shell keyword
time is /usr/bin/time
Run Code Online (Sandbox Code Playgroud)

它没有显示time可以是内置命令。

  1. “关键字”的定义是什么?
  2. “关键字”与“Bash 参考手册”中的“保留字”是同一个概念吗?

    保留字

    一个对壳有特殊意义的词。大多数保留字都引入了 shell 流控制结构,例如forwhile

  3. 关键字是否一定不是命令(或不是内置命令)?

    作为关键字,是time不是命令(或不是内置命令)?

    根据关键字和内建的定义,为什么time 不是内建而是关键字?

  4. 为什么“你可以做例如time { foo; bar; }”因为“time是一个关键字”?

bash

11
推荐指数
1
解决办法
4584
查看次数

命令“时间”独立工作但不在管道中

考虑以下:

# time sleep 1

real    0m1.001s
user    0m0.001s
sys     0m0.000s
# echo foo | time sleep 1
bash: time: command not found
Run Code Online (Sandbox Code Playgroud)

嗯……嗯?

好的,很明显,当作为管道运行时,Bash 正在以某种不同的方式搜索命令。谁能向我解释一下有什么区别?管道是否禁用外壳内置程序或其他东西?(我不认为它有......但是......我看不出这是怎么回事。)

bash pipe time

11
推荐指数
1
解决办法
838
查看次数

如何将可选参数传递给“time”命令

man time显示它有一些选项,例如,将输出写入time文件而不是stderr

-o FILE, --output=FILE
Run Code Online (Sandbox Code Playgroud)

所以,我尝试使用它

$ time -o out.txt ls
-o: command not found

real    0m0.081s
user    0m0.070s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)

这不行!它说-o: command not found

证明out.txt不存在:

$ cat out.txt
cat: out.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我如何使用像-o somefile.txtwith这样的选项time

我使用 Linux Ubuntu 18.04bash作为我的终端。

bash time

4
推荐指数
1
解决办法
977
查看次数

寻找可以执行与 echo 相同的操作的外部命令

echo是 bash 内置的。是否有一个外部命令可以做同样的事情echo?(可以做更多)

utilities echo

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

为什么 Bash 将 time 实现为保留字而不是内置字?

Bash 参考手册说

使用 time 作为保留字允许对 shell 内置函数、shell 函数和管道进行计时。外部时间命令无法轻松地对这些进行计时。

  1. 但它只比较了保留字time和外部命令 time,并没有解决这个问题:

    为什么 Bash 实现time为保留字,而不是内置命令?

    这能带来什么好处?

  2. 还有哪些保留字也可以作为(内置或外部)命令实现?他们与指挥同行相比有什么优势?(试图弄清楚他们的优势是共享的还是特定于每个人的)

    例如,

    • 保留字[[...]]与内置命令test[
    • 保留字select与内置命令read

bash time-utility

0
推荐指数
1
解决办法
760
查看次数