【问题标题】:How to get the program name in a fish shell script?如何在鱼壳脚本中获取程序名称?
【发布时间】:2013-06-07 03:31:31
【问题描述】:

在 bash 中,与在 ruby​​ 中一样,程序名称由 $0 给出。鱼里面是什么?如果必须,我可以执行以下操作:

set PROGRAM (ps --no-header -o args -p %self | egrep -o '\S+')[2]

但我确定程序名称一定已经在某处可用。我也可以在每个程序的存根中设置程序名称,但这有维护问题。

【问题讨论】:

    标签: shell fish


    【解决方案1】:

    要获得与您的命令相同的结果,它就是您要查找的脚本文件名。

    此信息未存储在变量中,但您可以通过查询status 获得。

    basename (status -f)      # The name of the file
    status -f                 # The full path of the file
    

    更多信息: http://fishshell.com/docs/2.0/commands.html#status

    【讨论】:

    • 如果程序名称与正在执行的文件不同,这将不起作用。例如,如果命令是在 config.fish 或符号链接文件中定义的函数。
    • 请尽量不要在config.fish 中定义函数,而是将functionName.fish 文件保存到$fish_function_path 中的某个位置,并让fish 在用于第一次。
    • status -f 给了我文件名,而不是完整路径。
    【解决方案2】:

    对于fish,使用$_ 作为程序名称。

    【讨论】:

    • 谢谢。 $_ 我什么也得不到。 link 中有一个对 $_ 的简短引用。也在link。与窗口标题有关,但不是实际的程序名称。
    • 交互式地,它是当前命令的名称,例如。对于echo $_,它会返回echo。在函数中,它仍然是您键入的顶级交互式命令(例如function f; g; end; function g; echo $_; end,然后您键入f,它将打印f)。在非交互式脚本中,它似乎是空的。无论如何,不​​是你想要的。
    • 在任何地方都有这些特殊变量名的列表吗? (另一个是$argv。)他们很难用谷歌搜索……
    • $_ 在fish 3.0.0 中已被弃用,取而代之的是status current-command github.com/fish-shell/fish-shell/blob/master/…
    【解决方案3】:

    fish3.x

    status current-command
    

    参见3.0 文档中的Deprecations section

    fish2.x

    使用$_ 作为程序名称。

    参见2.0 文档中的Programmable title section

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2014-03-06
      相关资源
      最近更新 更多