無法 cd 進入 Linux 機器中的文件夾。說文件/文件夾不存在
我已經編寫了一個測試 ksh 文件以 cd 到一個文件夾中並進行列表。以下是寫的:
`cd "their_file/"`; `pwd`; `ls -l`;
給我以下輸出:
./test.ksh: line 2: /home/user/final: Is a directory ./test.ksh: line 3: total: command not found
這是我的密碼:
/home/使用者/最終
我該如何解決?我猜它正在執行 cd 語句,然後退出該語句。我正在使用 Fedora 機器。
腳本中每個命令周圍的反引號將導致 shell 獲取命令的輸出並將其作為命令執行。
在命令周圍使用反引號相當於將命令放入其中
$( ... )
(這是擷取命令輸出的首選語法)。錯誤消息
/home/user/final: Is a directory
來自ksh
嘗試將 的結果pwd
作為命令執行,同樣,total: command not found
來自嘗試執行ls -l
.刪除反引號。同時刪除分號 (
;
)。僅當您想將兩個命令放在同一行時才需要這些:cd dir; pwd
你的腳本應該看起來像
#!/bin/sh cd "their_file" pwd ls -l
請注意,如果失敗,這仍然
pwd
會ls -l
執行cd
。cd
如果失敗則退出腳本:#!/bin/sh cd "their_file" || exit 1 pwd ls -l
這使用瞭如果失敗則
cd
返回非零*退出狀態的事實。*前面的||
(logical orexit 1
) 表示如果返回“false” ,腳本將繼續執行該exit
語句cd
(這在 shell 腳本中是非零退出狀態的含義)。你得到
/home/user/final: Is a directory
而不是/home/user/final/their_file: Is a directory
因為在子shellcd
中執行的原因(當你把它放在反引號或裡面時會發生這種情況)。由於它是在子 shell 中執行的,因此工作目錄的實際更改不會反映在父 shell(您的腳本)中。$( ... )
出於同樣的原因,您會注意到,當您的腳本完成執行時,您仍將位於呼叫腳本時的同一目錄中,而不是在該
their_file
目錄中。有關此特定內容的更多資訊,請參閱“為什麼腳本中的 cd 函式不起作用”和“更改目前目錄的腳本 (cd, pwd) ”(以及其他類似問題)。