fly*_*eep 7 zsh shell command-line
这个问题当然是相关的,但不同的到了一个关于执行命令。
该问题的解决方案涉及启动一个子shell——这是不可能的,因为需要采购而不是执行——或者修改你的~/.zshrc
,如果你想分发一个执行它的脚本,这是不可能的。(或者更确切地说,修改用户的配置文件是你不做的事情)
问题是 zsh 没有--init-file
像 bash 那样的参数(我第一次看到 bash 具有 zsh 没有的功能)
我会为我的问题提供答案,但它真的很丑,我希望有人知道规避它的技巧!
这个网站告诉我们有一个$ZDOTDIR
,它使得一个非常丑陋的解决方案成为可能:
/distdir/my-cmd
:
使用特定于 shell 的方法来替换 init 文件,否则就会失败。
\n\ncase $(basename $SHELL) in\n zsh) OLD_ZDOTDIR="$ZDOTDIR" ZDOTDIR="/distdir" zsh -i ;;\n bash) bash --init-file "/distdir/.zshrc" -i ;;\n *) echo "Unrecognized shell $SHELL"; exit 1 ;;\nesac\n
Run Code Online (Sandbox Code Playgroud)/distdir/.zshrc
:
命名为.zshrc
,因为名称在 zsh 中硬编码,但 bash 可以通过 传递任意命名的文件--init-file
。也可以将其命名为例如our_stuff.sh
,并创建一个.zshrc
仅包含. ./our_stuff.sh
.
因为我们实际上不想替换init 文件,但为了附加另一个文件,我们必须煞费苦心地重新创建获取它们的内置序列。
\n\n# ignore profile, login & logout rc files, as we want no login shells\ncase $(basename $SHELL) in\n zsh)\n test -f "$OLD_ZDOTDIR/.zshenv" && . "$OLD_ZDOTDIR/.zshenv"\n test -f "$OLD_ZDOTDIR/.zshrc" && . "$OLD_ZDOTDIR/.zshrc"\n ;;\n bash)\n test -f ~/.bashrc && source ~/.bashrc\n test -f /etc/bash.bashrc && source /etc/bash.bashrc\n ;;\nesac\n\ndo_our_stuff!\n\nPS1="myenv! $PS1" #tell the user he\xe2\x80\x99s in a modified shell\n
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
3093 次 |
最近记录: |