【发布时间】:2013-06-07 03:31:31
【问题描述】:
在 bash 中,与在 ruby 中一样,程序名称由 $0 给出。鱼里面是什么?如果必须,我可以执行以下操作:
set PROGRAM (ps --no-header -o args -p %self | egrep -o '\S+')[2]
但我确定程序名称一定已经在某处可用。我也可以在每个程序的存根中设置程序名称,但这有维护问题。
【问题讨论】:
在 bash 中,与在 ruby 中一样,程序名称由 $0 给出。鱼里面是什么?如果必须,我可以执行以下操作:
set PROGRAM (ps --no-header -o args -p %self | egrep -o '\S+')[2]
但我确定程序名称一定已经在某处可用。我也可以在每个程序的存根中设置程序名称,但这有维护问题。
【问题讨论】:
要获得与您的命令相同的结果,它就是您要查找的脚本文件名。
此信息未存储在变量中,但您可以通过查询status 获得。
basename (status -f) # The name of the file
status -f # The full path of the file
【讨论】:
config.fish 中定义函数,而是将functionName.fish 文件保存到$fish_function_path 中的某个位置,并让fish 在用于第一次。
status -f 给了我文件名,而不是完整路径。
对于fish,使用$_ 作为程序名称。
【讨论】:
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/…
fish3.x
status current-command
参见3.0 文档中的Deprecations section。
fish2.x
使用$_ 作为程序名称。
参见2.0 文档中的Programmable title section。
【讨论】: