2013-03-11 65 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