ssh登录并执行初始命令(cat tty+ script命令实现)
-q 不要打印Script started…, Script end…的信息
下面这条命令:可以保证在登录了远程shell的情况下,首先执行一段自定义命令,然后保持输入输出不关闭
echo 'echo yes' |cat - /dev/tty |script /dev/null ssh $D
其核心就是中间的cat命令使用了 /dev/tty来保证输入不关闭,从而保证不会发送EOF导致远程关闭
script配合ssh使用用来避免ssh识别到非终端的输入
这里应该总结的一个比较重要的特性是,使用cat /dev/tty来保活,实际上,cat 还可用来延时
echo 'echo yes'|cat - <(sleep 1)
ssh登录并执行初始命令(2次exec实现)
function swd {
local cur
cur=$(shortpath)
# -t: force terminal allocation
# first bash to read profiles
# second bash to change director
ssh -t $D "exec bash --login -i -c 'cd $cur;exec bash --login -i'"
}
使用ssh -t $D "exec bash --login -i -c 'cd $cur;exec bash --login -i'"
比较慢,为什么?因为需要执行两次exec
但是相比cat tty的实现,这个方案保留了100%的终端特性,所以建议使用这个。
平均2.8s~3s的时间,前面的实现估计1.6s左右