2016-12-02 86 views
0

我試圖在Mac/Linux機器上運行名爲myscript.command的腳本。腳本找不到文件

#!/bin/sh 
echo 'Starting' 
chmod 777 ./myfile 

的問題是,當我到達chmod部分我得到這樣的輸出:

chmod ./myfile: No such file or directory 

但兩者myscript.commandmyfile在同一個文件夾中。

編輯

看來,當我啓動腳本腳本的位置不被保留。我如何保存位置?

該腳本通過在UI中雙擊啓動。

+0

該文件在那裏嗎? – user2182349

+0

是的,文件在那裏。 –

+0

我認爲如果您也從該目錄共享「ls -l」的輸出,這會很有幫助。請注意,腳本將無視您啓動它的目錄,但會檢查文件的「當前」目錄。 – RVT

回答

0

$ 0

爲了改變當前的工作目錄到腳本的目錄,把下面的命令家當之後line:

cd "$(dirname "$0")" 

$0變量擴展爲腳本名(腳本的路徑) pt),並且dirname返回腳本目錄的路徑。

檢測當前的工作目錄

可以使用pwd命令來獲得當前工作目錄。如果你實際上是運行bash(我不知道,因爲在你的代碼點/bin/sh的家當),你可以使用內置的$PWD變量:

PWD 集科當前工作目錄cd內建。

存儲腳本的路徑傳遞到變量

另外,保存的目錄路徑到一個變量,並且在腳本中使用它,比如:

dir="$(cd $(dirname "$0"); pwd)" 
chmod 770 "$dir/somefile" 

雙引號

請注意使用雙引號。雙引號可防止重新解釋特殊字符。它也是將包含空格的字符串作爲單個字傳遞的方式:

dir="some directory name" 
cd "$dir" 

沒有雙引號,單詞被解釋爲單獨的參數。

-1

你可能會開始這樣的事情,太..

#!/bin/sh 
echo 'Starting' 
if [ -f ./myfile ]; then 
    chmod 777 ./myfile 
else 
    echo "File does not exist:" 
    ls -l 
fi