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

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

我已經編寫了一個測試 ksh 文件,將其放入資料夾中並進行清單。寫如下:

`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 機器。

答案1

腳本中每個命令周圍的反引號將導致 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 -lcdcd

#!/bin/sh

cd "their_file" || exit 1
pwd
ls -l

cd這利用了返回非零的事實退出狀態如果失敗了。||(邏輯或者)前面的表示如果傳回「false」 exit 1,腳本將繼續執行該語句(這在 shell 腳本中是非零退出狀態的意思)。exitcd


你得到的原因/home/user/final: Is a directory不是 /home/user/final/their_file: Is a directory是因為是cd在 a 中執行的子殼(這就是當您將其放在反引號或內時發生的情況$( ... ))。由於它是在子 shell 中執行的,因此工作目錄的實際變更不會反映在父 shell(您的腳本)中。

出於同樣的原因,您會注意到,當腳本執行完畢後,您仍將位於與呼叫腳本時相同的目錄中,而不是在目錄中their_file

有關此特定事物的更多信息,請參閱“為什麼腳本中的 cd 功能不起作用“ 和 ”更改目前目錄的腳本(cd、pwd)「(以及其他類似的問題)。

相關內容