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

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

Below I have listed the script .

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 提示符下单独执行命令。

230570 次浏览

您需要以 source或简写 .的形式运行该脚本

source ./myscript.sh

或者

. ./myscript.sh

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

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

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

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

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 脚本在交互式 shell 中创建导出变量的步骤。他最多只是要求对他的剧本进行评估。他没有提到剧本将如何使用的细节。它可以通过使用交互式 shell 中的 .source来实现。它可能是一个独立的脚本,或者它可能是从另一个脚本的 source。环境变量不特定于交互式 shell。这个答案解决了他的问题。

我不能解决它与 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
...

Tnen 在需要的时候调用它:

while read -r line; do
line=$(sed -e 's/[[:space:]]*$//' <<<${line})
var=`echo $line | cut -d '=' -f1`; test=$(echo $var)
if [ -z "$(test)" ];then eval export "$line";fi
done <environment.txt

以 source = 运行该脚本,以便也在调试模式下运行。

source= ./myscript.sh

在我的例子中,我在 =之前和之后都给了额外的空格。 例如,在我的 shell 文件中(比如 deploy.sh)

我一开始是写作的

GIT_SHA = $(git rev-parse HEAD)

但我用下面的方法修复了它:

GIT_SHA=$(git rev-parse HEAD)

So please note that we should not give any spaces before and after the =.