2016-08-27 49 views
2

我創建了一個運行某個函數的腳本。運行該特定函數後,它會調用另一個運行另一個函數的腳本。它的工作完美。然而,我呼籲與這行代碼,第二腳本:在Bash腳本中指定路徑變量

(exec "/home/sh0/folder/folder2/folder3/secondScript") 

如果我是用完全不同的文件路徑在不同的機器上運行我的腳本?有沒有辦法在任何機器上調用腳本而不用擔心文件路徑?

而且,我的所有腳本都位於同一目錄這將是「folder3」

提前感謝!

+0

你是不是真的指的是_totally different_,即_everything_但是'folder3/secondScript'可能會在不同的機器上有所不同?或者你是否意味着你的用戶的家(也許是'/ home/sh0/folder')目錄在每臺機器上都不同,但相對路徑保持不變? –

回答

3

最終,您必須知道腳本的安裝位置,並確保該目錄位於$PATH。然後,您可以使用secondScript,而無需指定任何腳本路徑。

但是,如果地點可能因機器而異,則必須決定如何切除差異。一種常見的選擇是將腳本保存在已知位置,例如$HOME/bin/usr/local/bin,在該位置您將路徑保留在已知位置 - 或在/opt/program/bin(根據您所稱的程序系統使用適當名稱的program)你正在使用)。

另一個選項是讓環境變量指定腳本的位置(PROGRAMLOCATION=/home/sh0/folder/folder2/folder3export PATH=$PATH:$PROGRAMLOCATION)。然後您必須確保環境變量(PROGRAMLOCATIONPATH)設置得當 - 這可能會非常棘手。

如果您認爲文件夾名稱足夠獨特,您可以(但可能不應該)使用find來查找目錄。當你找到6個不同的同名目錄時,你會做什麼?另外一個不受限制的find很慢 - 特別是如果你有NFS掛接的文件系統。

1

您可以簡單地存儲路徑類似如下所示

#!/bin/bash 

MY_PATH="$PWD" 
FOLDER3="folder3" 

echo "$MY_PATH/$FOLDER3" 

讓我們知道,如果這是你在找什麼或沒有。