executing bash shell from cshell (tcsh)



我有一个应该很简单的问题,但我在任何地方都找不到解决方案。

我正在尝试做一些简单的事情,例如在 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

最新更新