開発目的でホストに自動的に接続して作業を実行するスクリプトを使用します。接続して再接続するには(コンソールの再起動後)、常に[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からデータを読み取るコマンドを実行します。読み取りのstdinにデータをリダイレクトしないため、ユーザーは端末にいる必要があります。read
ユーザー入力を$REPLY
変数に保存します。その後、arg
変数は設定解除されます。
変数'read'
に文字列を割り当てるには、周囲にスペースを追加しないでください。arg
=
この部分が疑わしいようです。while $arg; < /dev/tty; do
- $ argの後にセミコロンがあるのはなぜですか?