2017-02-23 30 views
0

這裏的第一篇文章,和使用終端相當新手。任何失敗提前抱歉。列出目錄中的文件作爲菜單選項,然後運行該選定的腳本

我想列出任何.sh文件在一個目錄中,所以當我選擇文件時,它運行該文件。這些文件只是導出環境變量的.sh文件,所以我可以加載一個特定的工作即時通訊工作。

事情是,如果我複製腳本並粘貼到終端並運行,它的工作原理。

但是,如果我嘗試通過終端運行腳本。它可以工作,但不會設置環境變量。這是腳本。

cd ~/nuke/pipeline/executables/ 

echo "-- JOB LIST --" 

# set the prompt used by select, replacing "#?" 
PS3="Use number to select a file or 'stop' to cancel: " 

# allow the user to choose a file 
select filename in *.sh 
do 
    # leave the loop if the user says 'stop' 
    if [[ "$REPLY" == stop ]]; then break; fi 

    # complain if no file was selected, and loop to ask again 
    if [[ "$filename" == "" ]] 
    then 
     echo "'$REPLY' is not a valid number" 
     continue 
    fi 

    # now we can use the selected file, trying to get it to run the shell script 
    . $filename 
    echo "Job Environment is $filename" 

    # it'll ask for another unless we leave the loop 
    break 
done 




#And here's whats in one of the .sh files 
export DIR=/Users/darren/nuke/pipeline 
export JOB=RnD 
export SHOT=base 
+0

你是如何調用你的腳本?除非您將其作爲「源腳本」或「'調用。腳本「,它將運行在一個子shell和'的效果。 $ filename'丟失。 – codeforester

+0

不應該通過。 $文件名? – durwood

回答

0

這裏的問題是子shell。如您所知,在子shell中設置的環境變量不會傳播給父級。

讓我們將您的問題中的腳本稱爲menu.sh。它呼籲根據用戶的選擇其他的腳本,通過這條線:

. $filename 

看起來要調用的腳本menu.sh。這將運行在一個子shell中,並且通過上述. $filename調用設置的環境變量在完成時會丟失。

,使其正常工作,你需要調用menu.sh爲:

source /path/to/menu.sh 

. /path/to/menu.sh 
+0

好的,那麼我會在哪裏添加此文本行?我還沒有那麼好。 – durwood

+0

當你說'當我通過終端運行腳本時',你使用了什麼命令?我建議你使用'source menu.sh',假設你的腳本命名爲'menu.sh'。 – codeforester

相關問題