【问题标题】:In my command-line, why does echo $0 return "-"?在我的命令行中,为什么 echo $0 返回“-”?
【发布时间】:2012-01-17 02:19:48
【问题描述】:

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

我希望看到 bash 或一些文件名,如果我只收到 "-" 是什么意思?

【问题讨论】:

  • 我得到“-bash”。当然,$0 是正在运行的程序的名称。但它可以改变。
  • 重启没有解决,还是出现“-”
  • 我得到没有'-'的“bash”。 XUbuntu 11.10。

标签: linux shell command-line echo


【解决方案1】:

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

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

【讨论】:

  • 是否有其他方法可以确定我使用的是 bash、c-shell 还是原始 shell?这确实是我的目标,弄清楚我正在使用什么 shell,这样我就可以找出在哪里可以找到我的设置文件。我需要更改我的 $PATH 和 $JAVA_HOME
  • 看来我可以运行 echo $SHELL 来获得我需要的东西,不过感谢您解释 echo $0 :)
  • ~/.bash_login 在您登录时运行,因此您可以在那里设置一个环境变量,然后再检查它。
  • @Bluebomber357:不,$SHELL 告诉你你的登录 shell 是什么。它不会告诉您当前正在运行什么外壳。例如,如果您的登录 shell 是 /bin/tcsh,而您手动运行 bash,那么 $SHELL 仍将是 /bin/tcsh
【解决方案2】:

我得到了“-bash”,几周前,我尝试修改运行 pstop/htopecho $0 时可见的进程名称。直接回答你的问题,我认为这没有任何意义。 Echo 是 bash 的内置函数,所以当它检查参数列表时,bash 实际上是在做检查,并在那里看到自己。

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

【讨论】:

    【解决方案3】:

    因此,根据您的其中一个 cmets,您真的很想知道如何确定您正在运行的 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 版本指的是两个 shell 的祖先;如果您不使用任何特定于 bash 或特定于 tcsh 的功能,则使用这些后缀是有意义的。

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

    您可以在您的.cshrc.tcshrc, or.login, and an alias or function in your.profile,.bash_profile, or.bashrc` 中设置一个别名,该别名将调用您需要的任何脚本。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 2013-01-26
      • 2017-07-04
      • 1970-01-01
      相关资源
      最近更新 更多