개발 목적으로 호스트에 자동으로 연결하여 작업을 수행하는 스크립트를 사용합니다. 연결하고 다시 연결하려면(콘솔 재부팅 후) 항상 [ENTER]를 눌러야 합니다. 사용자 상호작용이 필요하지 않도록 수정하고 싶습니다. 어떻게 할 수 있나요?
root
강좌를 위해 계정으로 로그인 할 필요가 없습니다 . 모든 것이 통제됩니다. 저를 믿으세요. (내장형 플랫폼, 사용자 I/O 없음. Plus root
계정은 활성화되기 전에 비활성화됩니다.) 비밀번호도 할당되지 않았습니다! 내가 지금까지 가지고 있는 것:
#!/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 뒤에 세미콜론이 있는 이유는 무엇입니까?