我遇到了这个预命令修饰符,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。所以,
- 这基本上只是登录 shell 的事情吗?
- 如果不是,这是许多程序支持的常见复活节彩蛋吗?
- 如果我想在互联网上搜索支持它的程序,我会搜索什么? (它很难搜索,
-
因为许多引擎将其视为负运算符。即使搜索预命令修饰符也几乎找不到这个东西)
答案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 调用 Bash和6.2 Bash 启动文件;对于 zsh 来说,至少5.1 启动/关闭文件手册中提到了登录 shell(但我找不到说明 shell 如何确定它是否是登录 shell 的部分)。
我想 Zsh 只是在这里提供了一种访问该功能的简单方法,以防您需要它。可能还有其他方法可以做到这一点,至少 Bash 和 Dash 采取的-l
选项意味着相同的事情。