在评论中,您已经表明您在 Ubuntu 上,这是/bin/csh
指向 的符号链接/etc/alternatives/csh
,这是指向/bin/csh
.
csh
shell起源于 BSD Unix,因此它csh
是指向/bin/bsd-csh
. 它可以追溯到 1978 年左右,在 Unix 程序报告自己的版本号变得普遍之前。
由于您使用的是 Ubuntu,因此:
dpkg -l csh
应该告诉您您拥有的版本——尽管 Debian/Ubuntu 软件包的版本号可能不会比您已经拥有的信息更有用。并且包版本号和shell版本之间的关系并不完全清楚。
我假设这是正确的包名称。如果没有,请尝试dpkg -S /bin/bsd-csh
。
您可以判断您是否正在运行tcsh
,如下所示:
if ($?tcsh) then
echo This is tcsh
else
echo This is csh, not tcsh
endif
tcsh
应该与 csh 向后兼容,具有一些额外的功能,主要用于交互使用。如果为 tcsh 编写的脚本使用 tcsh 特定的功能,它很容易在 csh 下失败,但我希望 tcsh 能够处理 csh 脚本。正如tcsh(1)
手册页所说:
tcsh 是 Berkeley UNIX C shell csh(1)的增强但完全兼容的版本。
我知道您可能无法发布整个失败的脚本,但是您能否发布一个对您有用但对您的同事失败的小型代表性示例?
一种解决方案可能是请您的同事csh
在他们的系统上安装 vanilla;如果他们愿意,他们仍然可以/bin/tcsh
用作他们的交互式 shell,但是#!/bin/csh
会导致脚本由旧的 csh 执行,而不是 tcsh。
最后,如果不添加指向this的链接,我将无法回答有关 [t]csh 脚本的问题。
附录:我可以访问一个/bin/csh
不是 tcsh 的 Solaris 系统;如果你愿意,我可以在那里运行一些简单的测试。一个数据点:两者都/bin/tcsh
接受/bin/csh
为:
空命令,但/bin/csh
不接受参数:
% :
% arg
:: Too many arguments