SSH를 통해 두 개의 명령을 순차적으로 실행하고 싶습니다. 대화형 쉘이 없습니다. 두 번째 명령은 첫 번째 명령이 성공한 경우에만 실행해야 하지만 해당 줄은 스크립트 내부에 있으므로 두 번째 명령이 이런 방식으로 실행되지 않을 경우 사용자 친화적인 피드백을 받고 싶습니다. 그 후에는 스크립트의 나머지 부분이 계속 실행되어야 하므로 exit
여기서는 기다릴 수 없습니다.
&&
예를 들어 부울 연산자를 사용하여 실패할 경우 실행을 foo && bar
차단 bar
하고 실패할 경우에만 실행할 수 있다는 것을 알고 있습니다 . 그런데 서로 어떻게 어울리는지 좀 헷갈리네요.foo
bar || baz
baz
bar
그것들을 추가하세요:
(SSH를 통해 실행되며 대화형 셸이 필요하지 않음)
- 구현하다
foo
bar
foo
성공한 경우 에만 실행baz
foo
실패 시에만 실행하고 실행을 차단합니다.bar
ssh user@host "foo && bar || baz"
방금 설명한 내용을 수행하는 올바른 방법인가요?
답변1
귀하의 예 를 사용 foo && bar || baz
하면baz
bar
또는 foo
실패하다. 귀하의 설명에 따르면 이는 귀하가 원하는 것이 아닙니다. if
목표를 달성하기 위해 다음 설명을 사용할 수 있습니다 .
if foo; then
bar
else
baz
fi
또는 한 줄로 작성하고 싶다면 다음과 같이 하세요.
if foo; then bar; else baz; fi
답변2
쉘 스크립트의 전체 구문은 명령에 제공됩니다 ssh
. (이 명령은 원격 계정의 기본 셸에 의해 실행됩니다. 여기서는 sh
호환된다고 가정합니다.)
복합 명령은 따옴표로 묶어야 합니다. 큰따옴표를 사용하는 것이 맞지만 작은따옴표는 모든 쉘 특수 문자를 보호하므로 원격 명령에서 중요한 쉘 구성을 사용하려는 경우 중요할 수 있습니다.
그렇다면 원하는 작업을 수행하는 방법은 다음과 같습니다.
ssh user@host 'foo && bar || { echo foo failed >&2; baz; }'
임의로 복잡한 조건을 사용할 수도 있습니다.
ssh user@host '
if foo; then
bar
else
echo foo failed >&2
baz
fi'
(예, 작은따옴표 안의 여러 줄 문자열입니다.)