我有一个应该很简单的问题,但我在任何地方都找不到解决方案。
我正在尝试做一些简单的事情,例如在 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,它就可以正常工作。
我错过了什么?
谢谢
获取脚本意味着当前的 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(在获取脚本文件时不起作用。
变量的语法在 bash 和 tcsh 中是不同的。
在 tcs 中:
set var=val
在 bash:
var=val
source 只是在 shell 脚本中加载 shell 脚本,因此预期的语法是调用方 shell 脚本之一。
当你source
你的脚本时,你让你当前的 shell 执行它,最初的 shebang 被忽略。由于您当前的 shell 是tcsh
,因此它需要 tcsh 语法。如果你想让bash
执行你的脚本,你应该用像 chmod a+x my_tmp_script.sh
这样的命令让它可执行,然后直接执行它:
./my_tmp_script.sh
然后,最初的 shebang #!/bin/bash
将被遵守,并调用正确的翻译(bash
(。
需要像波纹管一样更改文件
!/bin/bash
清楚
回声 $$
回显"设置环境变量">
塞滕夫MY_TEMP_ENVVAR 123@tmp.com
echo $MY_TEMP_ENVVAR