2013-11-04 103 views
1

我試圖設置一個腳本完成運行後會持續的環境變量。它可以在我結束ssh會話後消失。在bash腳本中設置本地環境變量

樣品bash腳本:

# User picks an option 
1) export dogs = cool 
2) export dogs = not_cool 

運行腳本source script.sh不起作用,因爲它踢我出離殼的跑時,也需要交互式菜單,這樣就不會工作。基本上我希望用戶能夠選擇一個選項來在其shell中的環境變量之間切換。這甚至有可能嗎?

來源:

#!/bin/bash 
set -x 
show_menu(){ 
    NORMAL=`echo "\033[m"` 
    MENU=`echo "\033[36m"` #Blue 
    NUMBER=`echo "\033[33m"` #yellow 
    FGRED=`echo "\033[41m"` 
    RED_TEXT=`echo "\033[31m"` 
    ENTER_LINE=`echo "\033[33m"` 
    echo -e "${MENU}*********************************************${NORMAL}" 
    echo -e "${MENU}**${NUMBER} 1)${MENU} Option 1 ${NORMAL}" 
    echo -e "${MENU}**${NUMBER} 2)${MENU} Option 2 ${NORMAL}" 
    echo -e "${MENU}*********************************************${NORMAL}" 
    echo -e "${ENTER_LINE}Please enter a menu option and enter or ${RED_TEXT}enter to exit. ${NORMAL}" 
    read opt 
} 
function option_picked() { 
COLOR='\033[01;31m' # bold red 
RESET='\033[00;00m' # normal white 
MESSAGE=${@:-"${RESET}Error: No message passed"} 
echo -e "${COLOR}${MESSAGE}${RESET}" 
} 
clear 
show_menu 
while [ opt != '' ] 
do 
    if [[ $opt = "" ]]; then 
     exit; 
    else 
     case $opt in 
      1) clear; 
       option_picked "Option 1"; 
       export dogs=cool 
       show_menu; 
       ;; 
      2) clear; 
       option_picked "Option 2"; 
       export dogs=not_cool 
       show_menu; 
       ;; 
      x)exit; 
       ;; 
      \n)exit; 
       ;; 
      *)clear; 
       option_picked "Pick an option from the menu"; 
       show_menu; 
       ;; 
     esac 
    fi 
done 
+0

我看不到這是一個'bash'腳本 – hek2mgl

+4

您不能通過運行子進程來影響當前環境。這聽起來更像是你需要修改'script.sh'來使用'return'而不是'exit',這樣它就不會結束你當前的shell。請張貼你的shell腳本,或者至少是相關的部分。 – chepner

+1

@chepner他使用'source'。沒關係。問題是:腳本在哪裏? ;) – hek2mgl

回答

0

嘗試運行與「./myscript.sh」,這將使用當前的殼,而不必調用新的shell腳本(我仍懷疑哈希爆炸可能調用新的shell)。

Have a look here

也可以用的〜/ .bashrc解決。所需的環境可以添加到此文件中。如果你需要使用你自己的環境的新shell,你可以用「bash --rcfile」來調用「bash」。

0

這裏的問題是,. ./script.shsource ./script.sh無法運行像這樣的交互式菜單樣式腳本。沒有辦法,我知道從一個bash腳本設置本地環境變量,就像我在這裏要做的那樣。

0

重定向你的正常回聲的用戶交互標準錯誤(> & 2)

呼應,你要如果你改變了你的腳本,在你父母的環境標準輸出(> & 1)

值這樣你可以這樣調用它:

ENV_VAR=$(/path/to/your_script arg1 arg2 arg3 arg_whatever)

,現在你已經「出口」變量來「父」

相關問題