更改 bash 脚本,以便不需要用户输入

更改 bash 脚本,以便不需要用户输入

出于开发目的,我使用一个自动连接到主机来执行操作的脚本。我总是需要按 [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 后面有一个分号?

相关内容