我有一个问题应该很简单,但我无法在任何地方找到解决方案。
我正在尝试在bash脚本中执行像设置和envvar这样简单的操作。 从bash终端运行脚本它工作正常,但从tcsh运行它是我正在使用的机器上的默认值当我尝试导出我的变量时我得到未知命令。
这是我非常简单的脚本。 my_tmp_script.sh
#!/bin/bash
#clear
echo $$
echo "setting environment variables"
MY_TEMP_ENVVAR=123@tmp.com
export MY_TEMP_ENVVAR
echo $MY_TEMP_ENVVAR
如果我采购这个我得到
source my_tmp_script.sh
8790
setting environment variables
MY_TEMP_ENVVAR=123@tmp.com: Command not found.
export: Command not found.
如果我改为bash shell,它就可以了。
我错过了什么?
感谢
答案 0 :(得分:1)
当你source
你的脚本时,你有你当前的shell执行它,并且忽略了inital shebang。由于您当前的shell是tcsh
,因此它需要tcsh语法。如果您希望bash
执行您的脚本,您应该使用chmod a+x my_tmp_script.sh
之类的命令使其可执行,然后直接执行:
./my_tmp_script.sh
然后,最初的shebang #!/bin/bash
将被尊重,并且将调用正确的解释器(bash
)。
答案 1 :(得分:1)
获取脚本意味着当前shell进程执行脚本命令,而执行脚本时shell会生成一个新进程并等待它完成(除非在后台启动),以获得退出状态($?)。
兴趣是修改无法执行脚本的当前shell设置。
使用tcsh shell获取bash脚本是无稽之谈,因为它们是不同的语言,而bash设置可能对tcsh shell没用。
错误显示tcsh无法定义和导出环境变量
使用bash
MY_TEMP_ENVVAR=123@tmp.com
export MY_TEMP_ENVVAR
使用tcsh
setenv MY_TEMP_ENVVAR=123@tmp.com
如果可能的话,另一个解决方案是更改默认shell或在登录时启动bash,shebang(!#/ bin / bash)在获取脚本文件时无效。
答案 2 :(得分:0)
变量的语法在bash和tcsh中有所不同。
在tcs:
set var=val
在bash中:
var=val
source只是在shell脚本中加载shell脚本,因此预期的语法是调用者shell脚本之一。
答案 3 :(得分:0)
需要像bellow
一样更改您的文件echo $$
echo"设置环境变量"
setenv MY_TEMP_ENVVAR 123@tmp.com
回显$ MY_TEMP_ENVVAR