出于开发目的,我使用一个自动连接到主机来执行操作的脚本。我总是需要按 [ENTER] 键才能连接并重新连接(主机重新启动后)。我想修改它,以便不需要用户交互。怎么能做到这一点呢?
我不需要使用root
帐户登录的课程,一切都在掌控之中 - 请相信我。 (嵌入式平台,无用户 I/O。Plusroot
帐户在上线前将被禁用)也没有为其分配密码!到目前为止我所拥有的:
#!/bin/bash
if [ "$3" == "auto" ] ; then
arg= 'sleep 1';
ssharg='-v -o ConnectTimeout=1 -o ConnectionAttempts=1 -o StrictHostKeyChecking=no -p 2222';
else
arg= 'read';
ssharg='-o StrictHostKeyChecking=no -p 2222';
fi
#$dbg should be executed when connecting with parameter lx
dbg=`scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -P 2222 ~/local/script root@$1:/path/to/script`;`ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 root@$1 -n /path/to/script`;
if [ $2 == "lx" ] ; then
$dbg;
ssh -o StrictHostKeyChecking=no -p 2222 root@$1; echo "Reconnect?";sleep 1; while $arg; < /dev/tty; do $dbg; ssh -o StrictHostKeyChecking=no -p 2222 root@$1; echo "Reconnect?"; done
...
More similar elifs checking for other parameters (in $2) without requirement to tun $dbg beforehand
...
效果很好,只是我必须在启动脚本并重新连接后按 [ENTER]。
答案1
这条线
arg= 'read';
因为后面有一个空格=
,所以这一行暂时将arg
变量设置为空字符串,然后执行read
从 stdin 读取数据的命令 - 因为您没有将任何数据重定向到 read 的 stdin,所以用户必须在终端。read
将用户的输入存储到$REPLY
变量中。此后,该arg
变量将被取消设置。
要将字符串分配'read'
给arg
变量,不得在周围添加空格=
这部分看起来很可疑:while $arg; < /dev/tty; do
-- 为什么 $arg 后面有一个分号?