Shell

無法 cd 進入 Linux 機器中的文件夾。說文件/文件夾不存在

  • April 7, 2017

我已經編寫了一個測試 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

請注意,如果失敗,這仍然pwdls -l執行cdcd如果失敗則退出腳本:

#!/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) ”(以及其他類似問題)。

引用自:https://unix.stackexchange.com/questions/356507