2013-08-31 73 views
37

我希望編寫一個shell腳本來導出變量。用於設置環境變量的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

您正在使用哪個Shell(如bash,ksh,sh) – Tom

+0

[Save Global variables BASH]可能重複(http://stackoverflow.com/questions/10779771/save-global-variables-bash) – tripleee

+1

[將變量從環境中導出到環境中bash腳本沒有采購它](http://stackoverflow.com/questions/16618071/export-a-variable-to-the-environment-from-a-bash-script-without-sourcing-it) –

回答

24

請向我們展示腳本的更多部分,並告訴我們您必須單獨執行哪些命令並且想要簡單。

同時,你必須使用雙引號不是單引號來擴展變量:在一個命令結束

export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH" 

分號也是不必要的。

到目前爲止:

su -c 'sh /path/to/script.sh' 

(對於那些誰downvote這個答案,你應該知道,OP沒有明確要求一個shell:

#!/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你可以運行它腳本將在-interactive-shell上導出變量 - 而不是在一次運行shell腳本中使用source.來調用它的腳本將毫無意義,除非您實際上是從ano調用腳本其他腳本。當然如果真的有必要的話,你可以使用source.,但是還有另外一個問題需要解決,在這種情況下的實際問題似乎是使用單引號。

不要因爲它沒有幫助你而降低它的效率。答案是針對所提出的問題和OP。

如果OP -actually mentioned-它的確是通過shell腳本的建立導出的環境變量交互式shell這本來使用。)

+1

HI konsolebox!非常感謝你 。但我不明白其中的差別。export PATH =「/ home/linux/Practice/linux-devkit/bin /:$ PATH」用雙引號括起來。使用單引號導出CROSS_COMPILE ='/ home/linux/Practice/linux-devkit/bin/arm-arago-linux-gnueabi-'。你修改的腳本工作正常。 –

+0

@PragRao參數擴展根本不會發生在單引號中。你可以解釋詳細的引用[這裏](https://www.gnu.org/software/bash/manual/html_node/Quoting.html)。 – konsolebox

+2

@konsolebox問題的名字聽起來像「Shell腳本來設置環境變量」 - 社區的大部分人發現這個問題只是爲了解決從當前shell('source'或'.')運行這種腳本的問題。我很感謝你回答OP的問題,但我發現這個話題來自谷歌,下一個答案幫助我比你更多。第二個答案的upvotes(用'source'和'.'確認我的意見... – avtomaton

127

你需要運行腳本source或簡寫.

source ./myscript.sh 

. ./myscript.sh 

這將在現有的外殼內運行,確保由腳本創建或修改任何變量會腳本完成後可用。

僅使用文件名運行腳本將在單獨的子shell中執行腳本。

+0

通過使用源./setenv.sh - :給出未找到源錯誤。並通過使用。 ./setenv.sh它給無法打開setenv.sh。你能幫我解決這個問題嗎?謝謝 – Vishal

+2

這個修復解決了我的問題 – sampathpremarathna

+1

我的腦袋一小時爲什麼那些該死的輸出變量沒有在那裏(zsh)嘗試'排版-gx',輸出等,並有我的跆拳道?時刻和尚未 - 不知道一個子shell是用自己的範圍執行的。感謝節省我的一天從即將發生的憤怒懷念管理 – Inoperable

相關問題