繁体   English   中英

设置环境变量的shell脚本

[英]Shell script to set environment variables

我希望编写一个 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 提示符下单独执行命令。

您需要将脚本作为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 “d从另一个脚本。 环境变量并非特定于交互式 shell。 这个答案解决了他的问题。

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

source= ./myscript.sh

我无法用source ./myscript.sh解决它。 它说找不到源错误。
使用时也失败. ./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

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

我最初写

GIT_SHA = $(git rev-parse HEAD)

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

GIT_SHA=$(git rev-parse HEAD)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM