2016-05-17 118 views
0

我寫了自動設置環境錯誤與簡單的shell腳本

#!/bin/sh 

set path=(/dv/project/ $path) 

我改變由

chmod +x init.sh 

執行位當我運行它

./init.sh 

shell腳本它促使我與錯誤

./init.sh: line 3: syntax error near unexpected token `(' 
./init.sh: line 3: `set path=(/dv/project/ $path)' 

這裏有什麼問題?謝謝!

+0

'set path ='?這是什麼語法?它應該做什麼?你在哪看到使你認爲有效的文件? –

+0

@CharlesDuffy'set'是一個有效的命令,據我所知。它用於設置環境選項。 – denysdovhan

+0

@denysdovhan,它用於設置** flags **和修改命令行參數列表。 OP沒有做。 'set-path = foo'將是有效的(將'$ 1'設置爲'「path = foo」'),但這不是給定的。 –

回答

0

如果不需要使用set,只是試試這個:

#!/bin/bash 

path=(/dv/project/ $path) 

正如我已經注意到了,你想擴展您的$PATH環境變量,對不對?有一個更好的辦法。嘗試this approach

# Extend $PATH without duplicates 
function _extend_path() { 
    if ! $(echo "$PATH" | tr ":" "\n" | grep -qx "$1") ; then 
    PATH="$1:$PATH" 
    fi 
} 

# Add custom bin to $PATH 
[ -d ~/.bin ] && _extend_path "$HOME/.bin" 
+0

這比效率低得多。 '_extend_path(){[[$ PATH =〜(^ | :)「$ 1」(:| $)]] || PATH + = 「:$ 1」; }' - 一個複合命令,沒有子殼。 –

+0

另外,'path =(/ dv/project/$ path)'是數組語法,它根本不適用於'/ bin/sh'。想必你想'#!/ bin/bash'? –

+0

此外,'function'關鍵字不是POSIX sh標準的一部分,所以這也是一個可移植性錯誤;在POSIX sh中,它只是'extend_path(){'沒有'function'來定義一個函數。雖然我通常喜歡bash擴展(當與'#!/ bin/bash' shebang一起使用時),這對於便攜式替代品沒有任何價值。 –