Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何确定我的csh版本?_Shell_Version_Csh_Bsd - Fatal编程技术网

Shell 如何确定我的csh版本?

Shell 如何确定我的csh版本?,shell,version,csh,bsd,Shell,Version,Csh,Bsd,我有一些适合我的代码,但当我把它交给一些同事时,它坏了。他们使用的是tcsh,而据我所知,我使用的是csh 我试过: csh -v csh --version csh -V csh --help csh -h 没有成功(他们都直接带我去翻译提示)。我也在手册页上搜索了字符串“version”,但是我也没有找到任何有用的东西。有没有办法确定我安装的csh的版本 --编辑-- 按照/bin/csh中的符号链接,它们似乎在/bin/bsd csh处终止,这似乎意味着我正在使用某种bsd风格的csh

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

我试过:

csh -v
csh --version
csh -V
csh --help
csh -h
没有成功(他们都直接带我去翻译提示)。我也在手册页上搜索了字符串“version”,但是我也没有找到任何有用的东西。有没有办法确定我安装的
csh
的版本

--编辑--

按照
/bin/csh
中的符号链接,它们似乎在
/bin/bsd csh
处终止,这似乎意味着我正在使用某种bsd风格的csh shell,如果这对任何人都有帮助的话。另外,我正在使用ubuntu linux。

csh——只有当
csh
实际上是一个符号链接到<代码>/bin/tcsh
(!)

否则,
csh
会话似乎不会设置任何版本,除非在这里,
csh

预定义变量 以下变量对C外壳具有特殊意义。
其中,
argv
csh\u版本
cwd
home
路径
提示符
ROOTDIR
shell
状态
COMSPEC
,以及
TMPDIR
始终由shell设置。
除了
cwd
status
之外,此设置仅在初始化时发生;除非用户明确地进行修改,否则不会修改这些变量

例如,见:

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

/bin/csh
链接到
/etc/alternations/csh
哪个链接到
/bin/bsd csh

显然是bsd csh


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

在评论中,您指出您在Ubuntu上,
/bin/csh
是指向
/etc/alternations/csh
的符号链接,它是指向
/bin/csh
的符号链接

源于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)

我知道你可能不能发布整个失败的脚本,但是你能发布一个小的代表性的例子,对你有效,对你的同事无效吗

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

最后,我无法回答一个关于[t]csh脚本的问题,除非添加到的链接

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

% :
% arg
:: Too many arguments

如果你使用的是Ubuntu,那么你的
csh
就是
OpenBSD
版本,还有一些补丁。它绝对不支持获取其版本,因为它在任何地方都不编码其版本。但除此之外,我帮不了你

如果您没有在ubuntu上安装
csh
,但安装了
tcsh
,那么它将使用
tcsh
作为
csh
的别名。正如你所发现的,它们基本上是相容的


对于您自己,您可能可以通过使用
updatealternations
csh
重定向到
tcsh
(只要您也安装了tcsh)来调试该问题。

您是否尝试过-@KevinDTimm?因此,在我开始发布问题时,不建议我查看它。不幸的是,
$version
是一个未定义的变量。@closevoter--我看不出这个问题是如何偏离主题的。这是一个关于“程序员常用的软件工具”的问题,“基于我实际面临的问题”。如果你不同意,请更具体地告诉我原因。谢谢。因为对于真正的csh似乎没有一个可靠的测试(在Sun下,我认为有,但我再也没有访问该测试的权限了),而且真正的csh的唯一版本是特定于供应商的,可能您必须反转您的测试,比如'if(shellTest==tcsh);然后设置tcsh;否则如果(外壳试验==bsd csh);然后设置bsd csh;普通csh的else设置;结束if`(很抱歉,如果这不是真正的csh语法,对我来说,这是很久以前的事了;-)祝你好运。@Sheller--谢谢。实际上我只是在调试脚本。整个过程是一个超级复杂的混合脚本,用各种shell方言编写,甚至用一些perl来构建代码。我失败的脚本在整个过程结束时获得源代码,以完成特定目标机器的构建过程。它会出错,错误是关于
是无效的c