2013-04-17 259 views
0

我在我的一個應用程序文件夾中有一個腳本。通常我只是將cd放入到Unix中的那個locatin中,然後運行腳本,例如在bash中運行腳本

UNIX> cd My\Folder\

My\Folder> MyScript

這將打印所需的結果。

我不知道我該怎麼做這猛砸script.I做了以下

#!/bin/bash 
mydir=My\Folder\ 
cd $mydir 
echo $(pwd) 

這基本上使我在正確的文件夾中運行所需的腳本。但我不知道如何在代碼中運行腳本?

+4

目錄分隔符是'/',而不是在* NIX系統\。 –

+0

除非您在觸發腳本之前在腳本中執行了其他操作,否則可能需要爲腳本提供絕對路徑/This/is/My/Folder/Myscript'。 – devnull

回答

2

如果你可以調用MyScript(而不是./MyScript),顯然當前目錄(「。」)是PATH的一部分。 (其中,順便說一下,是不是一個好主意。)

這意味着你可以調用MyScript在腳本就是這樣:

#!/bin/bash 
mydir=My/Folder/ 
cd $mydir 
echo $(pwd) 
MyScript 

正如我所說的,./MyScript會更好(不作爲曖昧)。請參閱Michael Wild關於目錄分隔符的評論。

一般來說,巴什認爲不能解決的內置的關鍵字(如ifwhiledo等)的一切,在位於您的路徑某處的可執行文件或腳本(*)的調用。它會依次檢查PATH中的每個目錄是否存在一個命名爲可執行文件的腳本,並執行找到的第一個目錄(可能是或可能不是您打算運行的MyScript)。這就是爲什麼指定你的意思是MyScript這個目錄(./)是更好的選擇。

(*):當然,除非定義了該名稱的功能。

1

我寧願把名字放在引號中。這使得閱讀和避免錯誤更容易。

#!/bin/bash 
mydir="My Folder" 
cd "$mydir" 
echo $(pwd) 
./MyScript 
1

您的暱稱說,這一切;-)

當不包含/,猛砸首先檢查是否是一個別名或功能的提示輸入的命令。然後它檢查它是否是內置命令,然後纔開始在PATH上搜索。這是一個包含要搜索命令的目錄列表的shell變量。看起來你的情況.(即當前目錄)在PATH,這通常被認爲是一個非常糟糕的主意。

如果該命令包含/,則不執行PATH中的查找。相反,需要完全匹配。如果從/開始,它是絕對路徑,並且該文件必須存在。否則它是一個相對路徑,並且該文件必須相對於當前工作目錄存在。

所以,你有兩個可接受的選擇:

  1. 把你的腳本在某些目錄上您PATH。或者,將包含腳本的目錄添加到變量PATH

  2. 使用絕對路徑或相對路徑來調用腳本。

2
#!/bin/bash 
mydir=My/Folder/ 
cd $mydir 
echo $(pwd) 
MyScript