【发布时间】:2021-05-31 19:59:15
【问题描述】:
我有一个 shell 脚本,它导出变量以用于多用户环境的工具设置。由于不同的项目(100 多个项目的历史)使用不同的设置,我的脚本为不同的 shell 类型设置变量。
例子:
#!/bin/sh
#some XY_VAR setting happening here
case "$1" in
'-c')
echo "setenv XY $XY_VAR;"
;;
'-b')
echo "export XY=$XY_VAR;"
;;
esac
在项目的脚本中使用时,它是这样评估的
eval `set_my_vars -c` #when using (t)c-shell
eval `set_my_vars -b` #when using bash
我的问题是我可以让脚本检测它所评估的 shell 并将其输入到 case 语句中吗?
ps -hp $$
在评估脚本时不起作用,这是我的第一个想法(当然是 awk)。我发现人们想检测他们在哪个 shell 中运行的多种方法,但我发现使用 eval 时都失败了。
有人可以帮忙吗?也许我只是愚蠢地自己找到解决方案。
感谢和最好的问候 rws
【问题讨论】:
-
理论上是正确的,但您仍然可以设置变量并位于其他 shell 中。如果在 tcsh 中设置了 BASH,我的脚本将采用错误的 case 语句