如何确定我的csh版本?

时间:2013-01-10 14:05:17

标签: shell version csh bsd

我有一些适合我的代码,但是当我把它交给一些同事时,它就破了。他们正在使用tcsh,而据我所知,我正在使用csh

我试过了:

csh -v
csh --version
csh -V
csh --help
csh -h

没有成功(他们都只是带我直接进入翻译提示)。我也为字符串“version”找到了man页面,但我也没有想出任何有用的东西。有没有办法确定我已安装的csh版本?

- 编辑 -

遵循/bin/csh的符号链接,它们似乎终止于/bin/bsd-csh,这似乎意味着我正在使用一些BSD风味csh shell,如果这有助于任何人。另外,我正在使用ubuntu linux。

3 个答案:

答案 0 :(得分:5)

在评论中,您表示您使用的是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的功能,为ccsh编写的脚本很容易在csh下失败,但我希望tcsh能够处理csh脚本。正如tcsh(1)手册页所说:

  

tcsh 是Berkeley UNIX C shell的增强但完全兼容的版本, csh(1)

我知道您可能无法发布整个失败的脚本,但是您是否可以发布一个适合您的小代表示例并且对您的同事失败?

一个解决方案可能是要求同事在他们的系统上安装vanilla csh;他们仍然可以使用/bin/tcsh作为他们的交互式shell,但是#!/bin/csh会导致脚本由旧的csh执行,而不是tcsh。

最后,如果不添加指向this的链接,我无法回答有关[t] csh脚本的问题。

附录:我可以访问一个/bin/csh不是tcsh的Solaris系统;如果你愿意,我可以在那里进行一些简单的测试。一个数据点:/bin/tcsh/bin/csh都接受:作为空命令,但是/bin/csh它不接受参数:

% :
% arg
:: Too many arguments

答案 1 :(得分:3)

仅当csh --version实际上是... csh(!)

的符号链接时,

/bin/tcsh才有效

否则,csh会话似乎没有设置任何版本,MKSToolkit除外,其中cshsupposed to set a variable $csh_version

预定义变量

  

以下变量对C Shell具有特殊含义   其中,argvcsh_versioncwdhomepathpromptROOTDIRshellstatusCOMSPECTMPDIR始终由shell设置   除cwdstatus外,此设置仅在初始化时发生;除非用户明确地完成,否则不会修改这些变量。

例如,请参阅this dotfile

shell_is_csh  () { return [ -n "$csh_version"  ]; }

  

/bin/csh指向/etc/alternatives/csh的{​​{1}}链接。{。}}   显然是/bin/bsd-csh

...然后bsd-csh似乎不支持任何类型的版本功能。

答案 2 :(得分:2)

如果您使用的是Ubuntu,则cshOpenBSD版本,并附带一些补丁。它完全不支持获取它的版本,因为它不会在任何地方对其版本进行编码。但是,除此之外无法帮助你。

如果您未在ubuntu上安装csh,但已安装tcsh,则会使用tcsh作为csh的别名。正如您所发现的那样,它们大多是兼容的。

对于您自己,您可以使用update-alternativescsh重定向到tcsh来调试此问题(只要您已经安装了tcsh)。

相关问题