在Bash中,就像在Ruby中一样,程序名称由$0给出。那么在Fish中呢?如果必须的话,我可以这样做:
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
对于 fish
,使用 $_
作为程序名称。
echo $_
,它返回echo
。在函数中,它仍然是您键入的顶级交互式命令(例如function f; g; end; function g; echo $_; end
,然后键入f
,它将打印f
)。在非交互式脚本中,它似乎为空。无论如何,这不是你想要的。 - Beni Cherniavsky-Paskin$argv
。)它们很难通过 Google 查找... - mjs3.0.0
中,$_
已被弃用,建议使用status current-command
代替。详情请见https://github.com/fish-shell/fish-shell/blob/master/CHANGELOG.md#deprecations-1。 - Édouard Lopez
config.fish
中定义函数,而是将您的functionName.fish
文件保存到$fish_function_path
中的某个位置,并让 fish 在第一次使用时懒加载该函数。 - Jorge Bucaranstatus -f
给我文件名,而不是完整路径。 - Marco Sulla