사용자 입력이 필요하지 않도록 bash 스크립트를 변경하세요.

사용자 입력이 필요하지 않도록 bash 스크립트를 변경하세요.

개발 목적으로 호스트에 자동으로 연결하여 작업을 수행하는 스크립트를 사용합니다. 연결하고 다시 연결하려면(콘솔 재부팅 후) 항상 [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변수를 빈 문자열로 설정한 다음 readstdin에서 데이터를 읽는 명령을 실행합니다. 읽기의 stdin으로 데이터를 리디렉션하지 않으므로 사용자는 터미널에 있어야 합니다. read사용자 입력을 $REPLY변수에 저장합니다. 그 후에는 arg변수가 설정 해제됩니다.

변수 'read'에 문자열을 할당하려면 주위에 공백을 추가하면 안 됩니다.arg=


이 부분이 의심스러워 보입니다. while $arg; < /dev/tty; do-- $arg 뒤에 세미콜론이 있는 이유는 무엇입니까?

관련 정보