我希望编写一个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提示符下单独执行命令。
答案 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)
所以请注意,我们不应该在 =
前后留任何空格。