shell脚本可以设置调用shell的环境变量吗?我正在尝试编写一个shell脚本,在运行时,它将设置一些环境变量,这些变量将留在调用者的shell中。setenv FOO foo在CSH/tcsh中,或export FOO=foo在sh/bash中,只在脚本执行期间设置它。我已经知道了source myscript将运行脚本的命令,而不是启动新的shell,这可能导致设置“调用者的”环境。但问题是:我希望这个脚本可以从bash或csh调用。换句话说,我希望任何一个shell的用户能够运行我的脚本并更改他们的shell环境。因此,“Source”对我不起作用,因为运行CSH的用户无法获取bash脚本,而运行bash的用户无法获取CSH脚本。是否有任何合理的解决方案不需要在脚本上编写和维护两个版本?
3 回答

眼眸繁星
TA贡献1873条经验 获得超9个赞

千巷猫影
TA贡献1829条经验 获得超7个赞
ln -s setit setit-sh
ln -s setit setit-csh
eval `setit-sh`
eval `setit-csh`
#!/bin/basharg0=$0 arg0=${arg0##*/}for nv in \ NAME1=VALUE1 \ NAME2=VALUE2do if [ x$arg0 = xsetit-sh ]; then echo 'export '$nv' ;' elif [ x$arg0 = xsetit-csh ]; then echo 'setenv '${nv%%=*}' '${nv##*=}' ;' fidone
alias dosetit 'eval `setit-csh`'
alias dosetit='eval `setit-sh`'
cat nvpairfilename
添加回答
举报
0/150
提交
取消