2013-03-11 57 views
0

我想了解以下直接管道中的命令外壳可执行

方法1的区别:

  1. 推出的bash shell
  2. 在bash shell中键入命令my_command myargs

方法2:

  1. 推出的Bash shell
  2. 执行以下直接my_command myargs | /bin/bash/

我的命令传入方法1,但不会在方法2.我想这两种方法是等效的。当然,在方法1中,我还没有做过任何命令/在执行my_command之前更改了路径变量。在方法2中,我只是创建一个全新的shell并将命令传递给它。

有人可以解释这种差异吗?它缺少$ PATH,环境变量等?如果是这样,我怎么回声/找出?

回答

2

你的“方法2”将输出my_command管到bash。
这相当于

$(my_command myargs) 

如果改为管道文字文本,它将工作:

echo my_command myargs | /bin/bash/ 
+0

需要注意的是,你还可以看到差异,因为方法1使用一个交互式shell和方法2才不是。通常,您可能会观察到的唯一区别是,如果'my_command'是别名或shell函数,可能无法在非交互式shell中定义。 – chepner 2013-03-11 18:21:48