首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何确定我的csh版本?

如何确定我的csh版本?
EN

Stack Overflow用户
提问于 2013-01-10 22:05:17
回答 3查看 5.4K关注 0票数 6

我有一些代码可以为我工作,但当我把它交给一些同事时,它就坏了。据我所知,他们使用的是tcsh,而我使用的是csh

我试过了:

代码语言:javascript
代码运行次数:0
运行
复制
csh -v
csh --version
csh -V
csh --help
csh -h

没有成功(它们都直接将我带到解释器提示)。我还在手册页中添加了字符串"version",但在那里我也没有找到任何有用的东西。有没有办法确定我安装的csh的版本?

-编辑--

根据来自/bin/csh的符号链接,它们似乎终止于/bin/bsd-csh,这似乎意味着我正在使用一些BSD味道的csh shell,如果这对任何人有帮助的话。另外,我使用的是ubuntu linux。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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,因此:

代码语言:javascript
代码运行次数:0
运行
复制
dpkg -l csh

应该告诉您您的版本是什么--尽管Debian/Ubuntu包的版本号可能不会比您已有的信息更有用。包版本号和shell版本之间的关系并不完全清楚。

我假设这是正确的包名。如果没有,请尝试dpkg -S /bin/bsd-csh

您可以判断是否正在运行tcsh,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
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,它不接受参数:

代码语言:javascript
代码运行次数:0
运行
复制
% :
% arg
:: Too many arguments
票数 5
EN

Stack Overflow用户

发布于 2013-01-10 23:10:55

只有当csh实际上是指向...的符号链接时,csh --version才会起作用。/bin/tcsh(!)

否则,csh会话似乎不会设置任何版本,除了在这个MKSToolkit中,其中的cshsupposed to set a variable $csh_version

预定义变量

下面的变量对C Shell有特殊的意义。

其中,argvcsh_versioncwdhomepathpromptROOTDIRshellstatusCOMSPECTMPDIR始终由外壳设置。

除了cwdstatus之外,此设置仅在初始化时发生;除非用户显式修改,否则不会修改这些变量。

例如,请参阅this dotfile

代码语言:javascript
代码运行次数:0
运行
复制
shell_is_csh  () { return [ -n "$csh_version"  ]; }

/bin/csh链接到/etc/alternatives/csh,后者又链接到/bin/bsd-csh

显然是bsd-csh

..。那么bsd-csh似乎不支持任何版本特性。

票数 3
EN

Stack Overflow用户

发布于 2013-01-11 00:40:21

如果你使用的是Ubuntu,那么你的cshOpenBSD版本的,只有几个补丁。它完全不支持获取它的版本,因为它不会在任何地方编码它的版本。不过,除此之外我帮不了你。

正如您所发现的,它们基本上是兼容的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14259723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档