在不启动新shell的情况下将命令作为登录shell运行?

时间:2016-05-17 05:40:15

标签: shell zsh

如果我在登录shell中,我试图看看命令的输出是什么,而不必进入登录shell。我尝试了几种变体

zsh --login -c "alias"

但我的别名都没有显示出来; --login-c不兼容吗?

1 个答案:

答案 0 :(得分:1)

要测试-x和普通登录shell之间的区别,您可以/应该添加zsh -x --login -c "alias"选项以查看shell的内容。

当我运行/etc/zprofile时,它会处理zsh -x --login

当我运行/etc/zprofile时,它会处理/etc/zshrczsh

我通常不会使用~/.zprofile,因此我没有任何个性化的个人资料或启动文件,但似乎可能寻找(但在我的情况下,找不到) ~/.zshrc$ echo "echo in .zprofile" > ~/.zprofile $ echo "echo in .zshrc" > ~/.zshrc

我创建了这些文件的简单版本:

-c

果然,它们已被处理完毕。此外,--login .zprofile命令处理.zshrc但未处理-c "alias"文件。

因此,在--login之后使用/etc/zshrc会抑制~/.zshrczsh --login -c "[ -f /etc/zshrc ] && . /etc/zshrc; [ -f ~/.zshrc ] && . ~/.zshrc; alias" 的处理。如果你想要那些被执行的东西,你需要使用类似的东西:

-x

使用-调试登录处理通常是提供信息。

现代shell提供命令行选项以引发登录处理,这很好。我仍然有一个程序(我不再使用它)以旧式方式运行登录shell,在argv[0]中的shell名称之前添加-ksh。因此,运行login将触发登录处理; -程序将在开始时使用{{1}}运行登录shell。