Bash 스크립트에서 SSH를 사용하여 서버의 변수와 관련된 명령을 실행합니다. [폐쇄]

Bash 스크립트에서 SSH를 사용하여 서버의 변수와 관련된 명령을 실행합니다. [폐쇄]

나는 입력을 받아들이고, 원격 서버에 연결하고, 주어진 입력을 사용하여 일련의 명령을 실행하는 bash 스크립트를 작성했습니다. 이보다 훨씬 더 복잡해지겠지만 다음은 매우 간단한 예입니다.

#!/bin/bash
NAME=$1
echo $NAME
ssh user@server "ls $NAME"

bash 스크립트의 ssh 명령에 파일 이름을 하드코딩하면 응답을 받고, $NAME을 내 파일 이름으로 설정하여 명령줄에 정확한 줄을 입력하면 올바른 응답을 받지만 결합된 파일 이름을 전달합니다. 스크립트에 "ls"를 반환하려고 하면 "해당 파일이나 디렉터리가 없습니다"라는 오류가 반환됩니다. 내가 제공한 파일 이름이 반영되었으므로 $NAME에 올바르게 저장되었습니다. 내가 뭘 잘못했나요?

답변1

$NAME어떤 방식으로든 셸에 의해 확장되는 문자(예: 공백 또는 )가 포함되어 있으면 문제 $가 발생합니다. 당신은 그들로부터 탈출해야합니다. 빨리 받으세요매우털이 많은. 모든 경우를 만족시키려면 파일 이름을 원격지에 복사된 파일에 넣은 다음 해당 내용을 명령에 대한 인수로 사용해야 합니다. 그것은 다음과 같습니다:

NAME="$1"
TMPF=/tmp/tmpf-$$ # If you have mktemp then use that instead
printf %s "$NAME" >$TMPF
scp "$TMPF" user@server:$TMPF
ssh user@server "ls \"$(cat $TMPF)\""

관련 정보