Bash 루프 출력을 변수별 파일로 리디렉션

Bash 루프 출력을 변수별 파일로 리디렉션

이것은 나에게 분명할 수도 있지만 나는 한동안 이것에 갇혀 있었습니다.

나는 서버 목록을 가져오고, 그 목록에서 특정 정보를 검색한 다음, 시작 컴퓨터의 호스트 주소를 기반으로 파일에 출력을 저장하는 매우 간단한 bash 루프를 작성하려고 합니다.

현재 코드는 다음과 같습니다.

#!/bin/bash

SERVER_LIST=/path/to/hosts

while read REMOTE_SERVER
do
    {
    ssh user@$REMOTE_SERVER 'show_stat_from_shell_command' 
} > "$REMOTE_SERVER"
done < $SERVER_LIST

위의 결과는 내 목록의 첫 번째 호스트에 대한 출력 파일을 생성한 다음 종료하는 것입니다.

보다 확실한 솔루션 중 일부를 방지하기 위해 Ansible 등은 매우 제한된 환경이므로 옵션이 아닙니다. 같은 이유로 여러 쉘이나 tmux를 사용하는 것은 옵션이 아닙니다(호스트에서 한 번에 하나의 시스템에만 로그인할 수 있습니다).

그러니 누군가 내가 어떻게 엉망이 되었는지 정확히 말해 줄 수 있다면 매우 감사할 것입니다!

답변1

바꾸다

ssh user@$REMOTE_SERVER 'show_stat_from_shell_command'

통과

ssh user@$REMOTE_SERVER 'show_stat_from_shell_command' </dev/null

또한 ssh가 $SERVER_LISTstdin()에서 읽는 것을 방지합니다. 또는 ssh옵션을 사용하세요 -n.


-n: /dev/null에서 표준 입력을 리디렉션합니다(실제로 표준 입력에서 읽는 것을 방지합니다).

답변2

이 특정 문제에 대한 또 다른 해결책이 있습니다. 병렬 SSH라고 하며 pssh필요한 작업을 정확하게 수행합니다. 목록을 기반으로 컴퓨터에 연결하고 명령을 실행하며 출력을 로그 파일이나 호스트 이름 기반 파일에 저장할 수 있습니다.

프로젝트는 다음 위치에 있습니다.http://code.google.com/p/parallel-ssh/ .

관련 정보