SSH를 통해 for 루프 실행

SSH를 통해 for 루프 실행

여러분, 안녕하세요,

SSH를 통해 for 루프를 실행하려고 합니다. 이 루프는 서버에 계정이 있는 각 사용자의 마지막 로그인을 가져오는 데 사용됩니다.

ssh 172.20.2.1 '''for i in `cat /etc/passwd | awk -F: '{print $1}'`; do last -n 1 $i | sed -e '/^$/{N;d;}'; done'''

오류가 발생했습니다.

    bash: -c: line 1: syntax error: unexpected end of file
   -bash: d: command not found
   -bash: }; done: command not found

구글링했는데 정보가 별로 없더라구요.

어떤 도움이라도 대단히 감사하겠습니다.

답변1

오류는 '''인용문을 사용하는 명령을 사용하고 있기 때문에 발생합니다. 또한 및 명령을 '인용하기 위해 싱글을 사용하므로 쉘은 명령이 종료된 것으로 간주하고 혼란스러워집니다. 내가 아는 한, 그런 것은 존재하지 않습니다 . 처음 두 개는 단지 빈 문자열을 정의하기 때문에 무시되고, 마지막 것은 로 표시되는 여는 따옴표로 처리됩니다 . 질문이 강조표시되면 이를 볼 수 있습니다.awksed''''awk

가장 간단한 해결책은 명령을 작은따옴표로 묶고 및 큰 sed따옴표 로 묶는 것입니다 awk. 그러나 쉘 변수로 해석되지 않도록 스크립트 $1에서 이스케이프 처리해야 합니다 . awk당신은 또한 이유 없이 일을 지나치게 복잡하게 만들고 있습니다. 정말로 필요한 것은 다음과 같습니다.

ssh localhost 'cut -d: -f1 /etc/passwd | 
    while read i; do last -n 1 $i | sed -e "/^$/{N;d;}"; done'

관련 정보