unix – 如何将VAR从子shell导出到父shell?
我有一个Korn
shell脚本
#!/bin/ksh # set the right ENV case $INPUT in abc) export BIN=${ABC_BIN} ;; def) export BIN=${DEF_BIN} ;; *) export BIN=${BASE_BIN} ;; esac # exit 0 <- bad idea for sourcing the file 现在这些VAR仅在子shell中导出,但我希望它们也可以在我的父shell中设置,所以当我在提示时,这些变量仍然正确设置. 我知道 . .myscript.sh 但有没有办法在没有’采购’的情况下做到这一点? 编辑1:删除“退出0”部分 – 这只是我没有先考虑打字 EDIT2:添加更多细节我为什么需要这个:我的开发人员编写代码(为简单起见)2个应用程序:ABC& DEF.每个应用程序都由独立用户usrabc和usrdef在生产中运行,因此设置了他们的$BIN,$CFG,$ORA_HOME,无论什么 – 特定于他们的应用程序. 所以 > ABC的$BIN = / opt / abc / bin#$ABC_BIN在上面的脚本中 等等 现在,在开发框中,开发人员可以在他们自己的用户帐户’justin_case’下同时开发ABC和DEF,并且我让它们来源文件(上面),以便他们可以来回切换它们的ENV var设置. ($BIN应该一次指向$ABC_BIN,然后我需要切换到$BIN = $DEF_BIN) 现在,该脚本还应该创建新的沙箱,用于同一个应用程序的并行开发等.这使我以交互方式进行,要求沙箱名称等. > / home / justin_case / sandbox_abc_beta2 我考虑的另一个选项是编写别名并将它们添加到每个用户的配置文件中 >别名’setup_env =. .myscript.sh” 并运行它 > setup_env parameter1 … parameterX 这对我来说更有意义
我认为这是一个“不能做”的问题……
首先 – 由于最后的退出0,您不希望获取该脚本. 其次,没有unix子进程可以直接改变父进程的环境.否则各种疯狂的事情都有可能发生. 您可以使用默认配置文件或bashrc文件向其环境添加内容,还是可以为他们尝试运行的任何程序编写包装器? 请允许我详细说明“包装”概念. 假设您希望在环境变量“OPTIONS”中使用PROD或DEV运行程序snoopy,具体取决于您是否需要生产或开发.如果它没有设置,让我们说史努比做的事情就像消灭数据库进行生产和开发一样…… 将“snoopy”重命名为snoopy.bin(或.snoopy.bin) 然后将一个脚本放在名为“snoopy”的同一位置,其中包含: #!/bin/sh export OPTIONS case "$OPTIONS" in PROD) ;; DEV) ;; *) OPTIONS=DEV ;; esac #the binary is actually named snoopy.bin exec "$0.bin" "$@" 如果您不想使用实际文件,请将此脚本放在文件系统中的某个位置,该文??件系统将位于用户PATH中的实际snoopy程序之前,并在脚本的exec语句中具有二进制文件的完整路径… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |