从 cshell (tcsh) 执行 bash shell

executing bash shell from cshell (tcsh)

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

我正在尝试在 bash 脚本中做一些简单的设置和环境变量。 运行 来自 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,它工作正常。

我错过了什么?

谢谢

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)。

采购脚本意味着当前 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) 在获取脚本文件时无效。

需要像下面那样更改您的文件

!/bin/bash

清除

回声$$

echo "设置环境变量"

setenv MY_TEMP_ENVVAR123@tmp.com

回声$MY_TEMP_ENVVAR