簡體   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