用于设置环境变量的Shell脚本

时间:2013-08-31 11:57:31

标签: shell

我希望编写一个shell脚本来导出变量。

下面我列出了脚本。

echo "Perform Operation in su mode"
export ARCH=arm
echo "Export ARCH=arm Executed"
export PATH='/home/linux/Practise/linux-devkit/bin/:$PATH';
echo "Export path done"
export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-';
echo "Export CROSS_COMPILE done"

但这似乎不能正常工作。我必须在shell提示符下单独执行命令。

5 个答案:

答案 0 :(得分:173)

您需要以source或速记.

运行脚本
source ./myscript.sh

. ./myscript.sh

这将在现有shell中运行,确保脚本完成后脚本创建或修改的任何变量都可用。

仅使用文件名运行脚本将在单独的子shell中执行脚本。

答案 1 :(得分:35)

请向我们展示脚本的更多部分,并告诉我们您必须单独执行哪些命令,并希望简单。

同时你必须使用双引号而不是单引号来扩展变量:

export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"

单个命令末尾的分号也是不必要的。

到目前为止:

#!/bin/sh
echo "Perform Operation in su mode"
export ARCH=arm
echo "Export ARCH=arm Executed"
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
echo "Export path done"
export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-' ## What's next to -?
echo "Export CROSS_COMPILE done"
# continue your compilation commands here
...

对于su,您可以使用以下命令运行它:

su -c 'sh /path/to/script.sh'

(对于那些拒绝这个答案的人,你应该知道OP没有明确要求一个shell脚本可以在-interactive- shell上导出变量 - 而不是在一次性运行的shell脚本中使用source.调用它将毫无意义,除非您实际从其他脚本调用脚本。当然,如果是source.,则可以使用{{1}}或{{1}}确实有必要,但还有另一个需要修复的问题,看来这个背景下的实际问题是使用单引号。

不要因为它对你没有帮助而进行投票。答案是针对提出的问题和OP。

如果OP实际提到 - 它确实适用于通过shell脚本在交互式shell上设置可导出环境变量。)

答案 2 :(得分:1)

将脚本作为source =运行,也可以在调试模式下运行。

source= ./myscript.sh

答案 3 :(得分:0)

我无法用 const $ = selector => [...document.querySelectorAll(selector)]; const on = (target, type, handler) => target.forEach(it => it.addEventListener(type, handler)); const highlight = button => { for(const button of buttons) button.style.color = button === target ? "#E91E63" : ""; }; const buttons = $(".square_list > .btn"), links = $(".wrap_list > .btn"); on(buttons, "mouseenter", ({ target }) => { highlight(target); }); on(links, "click", ({ target }) => { const buttonTarget = buttons[ links.indexOf(target) ]; highlight(buttonTarget); }); 解决它。表示未找到源错误。
使用source ./myscript.sh时也失败。它显示无法打开myscript.sh。

因此,我的选择是将其放在一个文本文件中,以在下一个脚本中调用。

. ./myscript.sh

在需要时调用它:

#!/bin/sh
echo "Perform Operation in su mode"
echo "ARCH=arm" >> environment.txt
echo "Export ARCH=arm Executed"
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
echo "Export path done"
export "CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-' ## What's next to -?" >> environment.txt
echo "Export CROSS_COMPILE done"
# continue your compilation commands here
...

答案 4 :(得分:0)

就我而言,我在 = 前后添加了额外的空格。 例如,在我的 shell 文件中(比如 deploy.sh

我最初写的

GIT_SHA = $(git rev-parse HEAD)

但我使用以下方法修复了它:

GIT_SHA=$(git rev-parse HEAD)

所以请注意,我们不应该在 = 前后留任何空格。