从cshell执行bash shell(tcsh)

时间:2017-04-13 09:50:33

标签: linux bash shell 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,它就可以了。

我错过了什么?

感谢

4 个答案:

答案 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