Zev*_*erg 5 ssh zsh shell-script ping
我有一台家用电脑(我们称它为富兰克林,因为我就是这么称呼它的),我经常从我的工作笔记本电脑上通过 ssh 连接到它。当我在家时,我 ssh 到 franklin.local,而当我在工作或其他任何地方时,我 ssh 到 remote.address.of.franklin。
我希望在我的个人资料中有一个功能,该功能始终以正确的方式连接。我的网络状况经常变化(有线与无线、不同的 SSID 等),所以我不想通过检测网络状态来做到这一点,而是:
这是我现在使用的:
function franklin () {
ping -c 5 "franklin.local" > /dev/null
if [[ $? != 0 ]]
then
echo "franklin not available on local, so trying remote connection"
ssh -p 22 remote.address.of.franklin
else
echo "franklin available on local network, so trying local connection"
ssh username@franklin.local
fi
}
Run Code Online (Sandbox Code Playgroud)
问题是,ping 需要时间。我的问题是:我可以同时执行两个 ssh 命令,然后自动使用第一个连接的命令吗?
从你的 shell 中尝试一个简单的怎么样OR?
ssh username@franklin.local || ssh -p 22 remote.address.of.franklin
Run Code Online (Sandbox Code Playgroud)
我对 ZSH 不太熟悉,但我猜评估逻辑仍然是懒惰的,这意味着只有在第一部分失败时才评估第二部分。当然,第一个命令可能会停滞一段时间来尝试确定是否franklin.local可用。
您可以将该命令分配给别名以缩短它(就像您对该函数所做的那样)。