其實我對bash編程知之甚少。我讀過管道允許我們使用程序的輸出作爲另一個的輸入。然後,我預計一些語句,比如婁作品:如何與bash上的系統調用共享參數?
echo "newdirectory" | (mkdir && cd)
凡mkdir
從echo
接收outputed字符串作爲其第一個參數,cd
太之後。另一點是管道不能從左邊的進程同步執行(是嗎?)。
有一種方法可以通過bash上的系統調用重用參數嗎?
特別是在這種情況下創建一個新的目錄並改變它。
其實我對bash編程知之甚少。我讀過管道允許我們使用程序的輸出作爲另一個的輸入。然後,我預計一些語句,比如婁作品:如何與bash上的系統調用共享參數?
echo "newdirectory" | (mkdir && cd)
凡mkdir
從echo
接收outputed字符串作爲其第一個參數,cd
太之後。另一點是管道不能從左邊的進程同步執行(是嗎?)。
有一種方法可以通過bash上的系統調用重用參數嗎?
特別是在這種情況下創建一個新的目錄並改變它。
您可以爲此使用變量,並將命令行參數傳遞給兩個命令mkdir和cd,而不是嘗試將數據傳輸到這些命令。
MYDIR="newdirectory"
mkdir "$MYDIR" && cd "$MYDIR"
有了這個,
echo "newdirectory" | (mkdir && cd)
您同時連接的mkdir和CD的標準輸入。一個程序/命令需要知道 是否應該從stdin讀取數據,以及如何處理它。 mkdir
或cd
命令都沒有這樣做,他們希望你給他們命令行參數。
即使在命令可以從標準輸入讀取數據的情況下,在這種情況下,mkdir
會消耗輸入,並且不會爲cd
留下任何內容。在其他情況下,如果將相同的管道連接到多個命令/進程,則無法確定其中哪一個會讀取數據。
此外,(mkdir && cd)
中的圓括號表示這些命令在子shell中運行。但是cd
僅影響當前shell,因此您將無法觀察到cd
命令的任何影響。
感謝您的解釋。 –
mkdir `echo NewDirectorName`
也使用程序的輸出作爲另一個程序的參數。
完成此操作的另一種方法是使用xargs
命令。
echo NewDirectoryName | xargs mkdir
@ nos的回答對你的情況來說是最正確的。
不是普遍適用的,但您可以在問題的示例中使用'$ _'。 '$ _'擴展爲前一個命令的* last *參數,所以'mkdir「newdirectory」&& cd「$ _」'將是等價的。 – chepner
@chepner雖然nos的答案更加完整和教誨,但您的評論填補了我在尋找的內容。 –