ユーザー入力を必要としないように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変数を空の文字列に設定してからreadstdinからデータを読み取るコマンドを実行します。読み取りのstdinにデータをリダイレクトしないため、ユーザーは端末にいる必要があります。readユーザー入力を$REPLY変数に保存します。その後、arg変数は設定解除されます。

変数'read'に文字列を割り当てるには、周囲にスペースを追加しないでください。arg=


この部分が疑わしいようです。while $arg; < /dev/tty; do- $ argの後にセミコロンがあるのはなぜですか?

関連情報