用bash运行csh脚本,通过命令临时更改shell

7

我需要从Bash shell运行csh脚本,因此需要通过命令临时更改为tcsh。在交互模式下它可以完美地工作,但我无法弄清楚如何在一行命令中完成。

因此,在Bash shell中的交互模式下执行以下操作:

tcsh

source my.tcshr

useMyTcshCmd

等等。

如何用一个命令来完成所有这些操作呢?对于这个新手问题,很抱歉...

3个回答

18
tcsh -c "echo foo; echo bar"

结果:

foo
bar

所以这应该可行:

tcsh -c "source my.tcshr; useMyTcshCmd"

看起来很不错,我明天在工作中试一下。谢谢你的帮助。 - user501743

3

您应该直接在脚本中指定解释器:

#!/usr/bin/tcsh
echo "doing stuff"

然后只需运行该脚本:

./script

这种方式不太行,因为有多个csh脚本相互交互。而且首先需要进行.tcshrc设置。已经花了一段时间尝试了。 - user501743
你应该在脚本内部完成这个操作。我认为这没有任何问题,我经常这样做(虽然我使用的是bash,但原理是相同的)。 - Šimon Tóth
换句话说,使用一个包装脚本来源化您的点文件并运行其他每个脚本。 - Dennis Williamson
tcsh -c "setenv TEST bla;echo $TEST" TEST: 未定义的变量。 我应该如何创建一个包装文件? tcsh -c "setenv TEST bla" echo $TEST TEST: 未定义的变量。嗯... - user501743

0
tcsh -c useMyTcshCmd

1
我需要首先引用我的.tcshr,因此这将是一系列命令。tcshr需要设置全局环境变量。 - user501743
当tcsh运行时,它会读取.tcshrc文件。不确定为什么您想将其命名为my.tcshr。也许您可以将此文件包含在.tcshrc中。 - Raghuram
1
它不在主目录中,因此tcsh找不到它。 - user501743
1
哦,问题在于当我执行以下命令时,“.tcshr” 文件中设置的内容在后续命令中不可用:tcsh -c "source /opt/fuelpipe/use/use-0.1.0/share/.tcshr; echo $myvar" myvar: 未定义变量。 - user501743
即使这样也失败了: tcsh -c "setenv TEST bla;echo $TEST" TEST: 未定义的变量。tcsh -c "setenv TEST bla" echo $TEST TEST: 未定义的变量。 - user501743
2
明白了 - user501743

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接