我在我的一個應用程序文件夾中有一個腳本。通常我只是將cd
放入到Unix中的那個locatin中,然後運行腳本,例如在bash中運行腳本
UNIX> cd My\Folder\
My\Folder> MyScript
這將打印所需的結果。
我不知道我該怎麼做這猛砸script.I做了以下
#!/bin/bash
mydir=My\Folder\
cd $mydir
echo $(pwd)
這基本上使我在正確的文件夾中運行所需的腳本。但我不知道如何在代碼中運行腳本?
我在我的一個應用程序文件夾中有一個腳本。通常我只是將cd
放入到Unix中的那個locatin中,然後運行腳本,例如在bash中運行腳本
UNIX> cd My\Folder\
My\Folder> MyScript
這將打印所需的結果。
我不知道我該怎麼做這猛砸script.I做了以下
#!/bin/bash
mydir=My\Folder\
cd $mydir
echo $(pwd)
這基本上使我在正確的文件夾中運行所需的腳本。但我不知道如何在代碼中運行腳本?
如果你可以調用MyScript
(而不是./MyScript
),顯然當前目錄(「。」)是PATH的一部分。 (其中,順便說一下,是不是一個好主意。)
這意味着你可以調用MyScript
在腳本就是這樣:
#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
正如我所說的,./MyScript
會更好(不作爲曖昧)。請參閱Michael Wild關於目錄分隔符的評論。
一般來說,巴什認爲不能解決的內置的關鍵字(如if
,while
,do
等)的一切,在位於您的路徑某處的可執行文件或腳本(*)的調用。它會依次檢查PATH中的每個目錄是否存在一個命名爲可執行文件的腳本,並執行找到的第一個目錄(可能是或可能不是您打算運行的MyScript
)。這就是爲什麼指定你的意思是MyScript
這個目錄(./
)是更好的選擇。
(*):當然,除非定義了該名稱的功能。
我寧願把名字放在引號中。這使得閱讀和避免錯誤更容易。
#!/bin/bash
mydir="My Folder"
cd "$mydir"
echo $(pwd)
./MyScript
您的暱稱說,這一切;-)
當不包含/
,猛砸首先檢查是否是一個別名或功能的提示輸入的命令。然後它檢查它是否是內置命令,然後纔開始在PATH
上搜索。這是一個包含要搜索命令的目錄列表的shell變量。看起來你的情況.
(即當前目錄)在PATH
,這通常被認爲是一個非常糟糕的主意。
如果該命令包含/
,則不執行PATH
中的查找。相反,需要完全匹配。如果從/
開始,它是絕對路徑,並且該文件必須存在。否則它是一個相對路徑,並且該文件必須相對於當前工作目錄存在。
所以,你有兩個可接受的選擇:
把你的腳本在某些目錄上您PATH
。或者,將包含腳本的目錄添加到變量PATH
。
使用絕對路徑或相對路徑來調用腳本。
#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
目錄分隔符是'/',而不是在* NIX系統\。 –
除非您在觸發腳本之前在腳本中執行了其他操作,否則可能需要爲腳本提供絕對路徑 path/to/interpreter >/This/is/My/Folder/Myscript'。 – devnull