2016-05-17 67 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一起使用时),这对于便携式替代品没有任何价值。 –