我有一些代码可以为我工作,但当我把它交给一些同事时,它就坏了。据我所知,他们使用的是tcsh
,而我使用的是csh
。
我试过了:
csh -v
csh --version
csh -V
csh --help
csh -h
没有成功(它们都直接将我带到解释器提示)。我还在手册页中添加了字符串"version",但在那里我也没有找到任何有用的东西。有没有办法确定我安装的csh
的版本?
-编辑--
根据来自/bin/csh
的符号链接,它们似乎终止于/bin/bsd-csh
,这似乎意味着我正在使用一些BSD味道的csh shell,如果这对任何人有帮助的话。另外,我使用的是ubuntu linux。
发布于 2013-01-11 00:36:29
在评论中,你已经指出你在Ubuntu上,/bin/csh
是到/etc/alternatives/csh
的符号链接,是到/bin/csh
的符号链接。
The 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的特性,那么为tcsh编写的脚本在csh下很容易失败,但我希望tcsh能够处理csh脚本。正如tcsh(1)
手册页所说:
csh tcsh是Berkeley UNIX C shell的增强但完全兼容的版本,
(1)。
我知道你可能不能发布整个失败的脚本,但你能发布一个对你有效但对你的同事失败的有代表性的小例子吗?
一种解决方案可能是让您的同事在他们的系统上安装普通的csh
;如果他们愿意,他们仍然可以使用/bin/tcsh
作为他们的交互式shell,但是#!/bin/csh
将导致脚本由旧的csh执行,而不是tcsh。
最后,如果不添加到this的链接,我就无法回答有关tcsh脚本的问题。
附录:我可以使用不是tcsh的/bin/csh
访问Solaris系统;如果您愿意,我可以在那里运行一些简单的测试。一个数据点:/bin/tcsh
和/bin/csh
都接受:
作为空命令,但对于/bin/csh
,它不接受参数:
% :
% arg
:: Too many arguments
发布于 2013-01-10 23:10:55
只有当csh
实际上是指向...的符号链接时,csh --version
才会起作用。/bin/tcsh
(!)
否则,csh
会话似乎不会设置任何版本,除了在这个MKSToolkit中,其中的csh
是supposed to set a variable $csh_version
。
预定义变量
下面的变量对C Shell有特殊的意义。
其中,argv
、csh_version
、cwd
、home
、path
、prompt
、ROOTDIR
、shell
、status
、COMSPEC
和TMPDIR
始终由外壳设置。
除了cwd
和status
之外,此设置仅在初始化时发生;除非用户显式修改,否则不会修改这些变量。
例如,请参阅this dotfile:
shell_is_csh () { return [ -n "$csh_version" ]; }
/bin/csh
链接到/etc/alternatives/csh
,后者又链接到/bin/bsd-csh
。
显然是bsd-csh
..。那么bsd-csh
似乎不支持任何版本特性。
发布于 2013-01-11 00:40:21
如果你使用的是Ubuntu,那么你的csh
是OpenBSD
版本的,只有几个补丁。它完全不支持获取它的版本,因为它不会在任何地方编码它的版本。不过,除此之外我帮不了你。
正如您所发现的,它们基本上是兼容的。
https://stackoverflow.com/questions/14259723
复制相似问题