105

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

4

5 回答 5

273

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

source ./myscript.sh

或者

. ./myscript.sh

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

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

于 2013-08-31T12:17:36.400 回答
55

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

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

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

于 2013-08-31T12:19:34.017 回答
3

以 source= 身份运行脚本以在调试模式下运行。

source= ./myscript.sh
于 2020-06-21T17:37:45.743 回答
0

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

我最初写

GIT_SHA = $(git rev-parse HEAD)

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

GIT_SHA=$(git rev-parse HEAD)

所以请注意,我们不应该在 . 之前和之后给任何空格=

于 2021-05-08T06:00:47.140 回答
0

我无法用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
...

需要时调用它:

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
于 2019-07-22T21:13:32.743 回答