在我的命令行中,为什么echo $ 0返回“ - ”?

时间:2011-12-09 20:39:32

标签: linux shell command-line echo

当我输入echo $0时,我看到-

我希望看到bash或某些文件名,如果我得到"-",这意味着什么?

3 个答案:

答案 0 :(得分:6)

$0前面的连字符表示此程序是登录shell。

注意:$0并不总是包含正在运行的可执行文件的准确路径,因为有一种方法可以在调用execve(2)时覆盖它。

答案 1 :(得分:1)

几周前,我得到'-bash',我在修改流程名称时可以看到,当您运行pstop/htopecho $0时。要直接回答你的问题,我认为这并不意味着什么。 Echo是bash的内置函数,所以当它检查参数列表时,bash实际上正在进行检查,并在那里看到自己。

你的直觉是正确的,如果你在脚本文件中写了echo $0并运行它,你会看到脚本的文件名。

答案 2 :(得分:1)

因此,基于您的一条评论,您真的想知道如何确定您正在运行的shell;您认为$0是解决方案,并询问了这一点,但正如您所见,$0无法可靠地告诉您需要了解的内容。

如果你正在运行bash,那么将设​​置几个未导出的变量,包括$BASH_VERSION。如果您正在运行tcsh,那么将设​​置shell变量$tcsh$version。 (请注意,$version是一个过于通用的名称;我遇到了一些问题,其中一些系统范围的启动脚本设置它并破坏特定于tcsh的变量。但$tcsh应该是可靠的。)

但真正的问题是,bash和tcsh语法大多不兼容。有可能编写一个脚本,可以在从tcsh或bash调用时(通过.source)执行,但这将是困难和丑陋的。

通常的方法是使用单独的安装文件,每个shell使用一个。例如,如果您正在运行bash,则可以运行

. ~/setup.bash

. ~/setup.sh

如果您正在运行tcsh,则可以运行

source ~/setup.tcsh

source ~/setup.csh

.sh.csh版本是指两个炮弹的祖先;如果您没有使用任何特定于bash或特定于tcsh的功能,那么使用这些后缀是有意义的。

但这需要知道你正在运行哪个shell。

您可以在.cshrc.tcshrc, or。登录, and an alias or function in your。个人资料,。bash_profile , or。bashrc`中设置别名无论你需要哪个剧本。

或者,如果您想在每次登录时进行设置,或者每次启动新的交互式shell时,都可以将命令直接放在相应的shell启动文件中。当然,tcshbash的命令会有所不同。

相关问题