這個問題在這里已經有了答案: 為什么我不能在腳本中使用“cd”更改目錄? (32 個回答) 17 小時前關閉。
我以特定方式運行 Linux Shell 命令,我想弄清楚兩種運行它們的方式是否會產生相同的結果。
示例 1:
echo "echo "hi"" | /bin/sh
你好
示例 2:
echo "pwd" | /bin/sh
/根/測驗
示例 3:
在這里,假設有一個名為 test.txt 的檔案,它只包含單詞“test”
echo "cat test.txt" | /bin/sh
測驗
到目前為止,一切似乎都運行良好,但是當我輸入以下內容時
echo "cd .." | /bin/sh
什么都沒有發生,這不應該是這種情況,因為如果我cd ..不| /bin/sh輸入并按 Enter,Shell 會將我帶回到之前的路徑,在這種情況下將是/root
所以,我只想知道通過以下方式使用的可用命令的實際串列是什么 /bin/sh
uj5u.com熱心網友回復:
您可以通過這種方式運行任何命令,但它們由內殼執行,因此僅在該殼內有效。
使用列印文本到螢屏上cat,echo或者pwd是永久的,即使內殼已退出,因為實際上內殼寫到它的標準輸出,和外殼(你正在使用鍵入命令)已連接的內殼的輸出到它自己的輸出,它進入螢屏。
“當前作業目錄”的想法不是系統范圍的,但它附加到一個行程,如 shell。該cd命令會更改當前shell 的作業目錄,但不會影響外殼程式的作業目錄。此外,任何由 shell 啟動的新行程都將從父 shell 的作業目錄開始,但之后在任一行程中更改目錄不會對另一個行程產生影響。
環境變數是另一件只對當前 shell 有影響的東西,您可以選擇是否通過exporting 將環境變數傳遞給子行程。
例如,以下內容將為您提供“正確”的父目錄:
echo "cd ..; pwd" | /bin/sh
uj5u.com熱心網友回復:
運行后echo "cd .." | /bin/sh你會回到上一個檔案夾,因為上面的命令運行了一個新的 shell 實體,它改變了新子 shell 內的當前路徑,而不是呼叫者實體。
出于同樣的原因,我們從不創建幫助腳本來更改 dir,但我們使用在呼叫 shell 的背景關系中運行的別名。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365309.html
