명령줄에서 다음 rsync 명령을 실행하면 올바른 반환 상태가 표시됩니다.
/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"
echo $?
255
액세스할 수 없으므로 hostname
반환 값은 255입니다.
나는 괜찮습니다. 하지만 동일한 명령을 스크립트에 넣으면 bash
어떤 반환 값도 얻지 못합니다.
#!/bin/bash
datetime=`date +%Y.%m.%d`
ret_value= `/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"`
echo $ret_value
스크립트 출력에는 공백이 표시됩니다. 인쇄되지 않았습니다 $ret_value
.
여기서 내가 놓치고 있는 것은 rsync
스크립트를 통해 인쇄된 명령의 반환 값을 얻는 것입니다.
답변1
이 시도.
#!/bin/bash
datetime=`date +%Y.%m.%d`
ret_value=`/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"; echo $?`
echo $ret_value
문제는 실행 중인 명령이 파일로 파이프되기 때문에 출력이 생성되지 않는다는 것입니다. 마지막 명령 종료 코드를 에코하는 명령을 추가하면 원하는 결과를 얻을 수 있습니다.
답변2
선
ret_value= `…`
이상한 동작이 있습니다. 먼저 백틱 내부의 명령을 실행합니다. 그런 다음 명령의 출력은 단어로 분할되며 첫 번째 단어는 실행할 명령으로 사용됩니다. 단어가 하나 이상 있으면 명령으로 실행되고(다른 단어는 인수로 사용) ret_value
환경 변수는 명령 기간 동안에만 빈 문자열로 설정됩니다. 그러나 역따옴표 안의 명령 출력은 비어 있기 때문에 이 줄은 할당입니다. 즉, 쉘 변수를 ret_value
빈 문자열로 설정합니다.
당신은 글을 쓰고 싶을 수도 있습니다
ret_value=`…`
등호 뒤에는 공백이 없습니다. 이는 ret_value
다음과 같이 설정됩니다 .산출백틱의 명령 - 이것이 백틱의 의미입니다. 쉘에서는 특히 할당에서 공백이 중요하다는 점을 기억하십시오.
명령의 반환 값을 얻으려면 명령을 실행하고(원하는 위치에서 출력) 특수 변수의 내용을 읽으십시오 $?
. 이 $?
변수에는 이전에 실행된 명령의 상태가 포함됩니다.
/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"
echo $?
$?
다른 명령이 실행되면 변수가 변경되므로 다른 변수에 저장하기를 원하거나 저장해야 할 수도 있습니다 .
/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"
ret_value=$?
if [ $ret_value -eq 0 ]; then
echo "Success"
else
echo "Failure, rsync return status $ret_value"
fi
exit $ret_value