从bash脚本中执行命令

时间:2010-12-07 14:31:51

标签: bash

我想从bash脚本运行以下命令:

sudo cat << EOF>> /etc/profile

export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
export JAVA_HOME=/opt/jdk1.6.0_22/
export PATH=${JAVA_HOME}/bin:/opt/tomcat/bin:${PATH}

EOF

sudo source /etc/profile

但是得到以下错误:

/home/ak/init-script.sh: line 40: /etc/profile: Permission denied
sudo: source: command not found

关于如何实现我想要的任何帮助?

安东尼

2 个答案:

答案 0 :(得分:3)

source是内置bash命令,而不是您可以使用sudo运行的程序。您必须在整个脚本上使用sudo

答案 1 :(得分:2)

尝试写入/ etc / profile时,出现“权限被拒绝”错误。这是因为sudo仅应用于第一个命令 - cat,但写入/ etc / profile的进程具有普通用户的权限。

这就是为什么不创建此文件的原因。有一个workaround,但我认为你不需要它,因为如果你只需要导出一些变量,你可以直接在shell中进行:

export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
export JAVA_HOME=/opt/jdk1.6.0_22/
export PATH=${JAVA_HOME}/bin:/opt/tomcat/bin:${PATH}

如果你需要将/ etc / profile中的设置加载到shell,你可以在没有sudo的情况下运行source /etc/profile,那里不需要它。