zsh 预命令修饰符 - 的用法示例是什么?

zsh 预命令修饰符 - 的用法示例是什么?

我遇到了这个预命令修饰符,man zshbuiltins其中引用了man zshmisc.我尝试寻找示例,但没有找到任何示例。

这是我的man zshmisc页面显示的内容:

PRECOMMAND MODIFIERS
   A simple command may be preceded by a precommand modifier, which  will  alter
   how  the  command is interpreted.  These modifiers are shell builtin commands
   with the exception of nocorrect which is a reserved word.

   -      The command is executed with a `-' prepended to its argv[0] string.

这是我尝试过的:

prompt> - echo
cd: no such file or directory: /Users/bmiller286/Projects/bgovecholonestar-eventsvc

关于如何使用此预命令修饰符的一两个示例是什么?

编辑:它看起来像oh-my-zsh别名-cd -,这解释了为什么cd抱怨。到目前为止,我只见过一个支持这种在前面添加 to 范例的用例,-argv[0]就是登录 shell。

文档(上面)的行为就像这是一个常见范例,并非特定于登录 shell。所以,

  1. 这基本上只是登录 shell 的事情吗?
  2. 如果不是,这是许多程序支持的常见复活节彩蛋吗?
  3. 如果我想在互联网上搜索支持它的程序,我会搜索什么? (它很难搜索,-因为许多引擎将其视为负运算符。即使搜索预命令修饰符也几乎找不到这个东西)

答案1

这:

% cat > .bash_login
echo this is a login shell
% bash
bash$ exit
% - bash
this is a login shell
bash$

或者用英语:有些 shell 检查它们的argv[0],如果那里有一个前导破折号,它们就会进入“登录 shell”模式。无论这对各种 shell 意味着什么,至少可能会改变读取的启动文件。对于 Bash,请参阅6.1 调用 Bash6.2 Bash 启动文件;对于 zsh 来说,至少5.1 启动/关闭文件手册中提到了登录 shell(但我找不到说明 shell 如何确定它是否是登录 shell 的部分)。

我想 Zsh 只是在这里提供了一种访问该功能的简单方法,以防您需要它。可能还有其他方法可以做到这一点,至少 Bash 和 Dash 采取的-l选项意味着相同的事情。

相关内容