Gee*_*eeb 9 zsh configuration shell-script interactive ssh-agent
我想创建一个在 Zsh 实例启动时运行的脚本,但前提是该实例是:
我觉得我说得对.zshrc运行的所有交互shell实例,.zprofile并.zlogin为所有登录shell运行,并且.zshenv运行于所有情况。
我想这样做的原因是检查是否有现有的 ssh-agent 正在运行,如果有,请在新打开的 shell 中使用它。
我想任何执行的测试都最好放在.zshrc(因为这保证了交互式 shell)和从那里调用的指定“非登录事件”脚本中。
在测试 ssh-agent 之前,我可能首先想检查新 shell 是否已经作为现有远程 SSH 会话的一部分运行,但我为此找到了这个 SE 配方。
我选择 Zsh 是因为它是我喜欢的 shell,但我想任何正确的技术都适用于其他 shell。
Sté*_*las 16
if [[ -o login ]]; then
echo "I'm a login shell"
fi
if [[ -o interactive ]]; then
echo "I'm interactive"
fi
Run Code Online (Sandbox Code Playgroud)
[[ -o the-option ]] 如果设置了选项,则返回 true。
您还可以使用$options特殊关联数组或通过运行set -o.
要检查是否有 ssh-agent:
if [[ -w $SSH_AUTH_SOCK ]]; then
echo "there's one"
fi
Run Code Online (Sandbox Code Playgroud)
在ksh(和zsh):
case $- in (*i*) echo interactive; esac
case $- in (*l*) echo login; esac
Run Code Online (Sandbox Code Playgroud)
在bash,这是一团糟,你需要:
case $- in *i*) echo interactive; esac # that should work in any Bourne/POSIX shell
case :$BASHOPTS: in (*:login_shell:*) echo login; esac
Run Code Online (Sandbox Code Playgroud)
并$SHELLOPTS包含更多选项。您可以设置一些选项set -<x>,有的用set -o option,有的用shopt -s option。
| 归档时间: |
|
| 查看次数: |
4259 次 |
| 最近记录: |