상황
아래와 같이 txt 파일에 3줄이 작성되어 있습니다.
1 2 3 4 | # cat d20201015_redis_master.txt test1 192.168.1.1 6000 test2 192.168.1.2 6000 test3 192.168.1.3 6000 | cs |
아래 스크립트는 텍스트 파일을 한 줄씩 읽어서
그 IP 에 ssh 접속을 하여 결과를 전달하는 방식입니다. ( 스크립트 주석은 없습니다. )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | cat d20201015_redis_master.txt | while read line do instance_name=`echo $line | cut -d ' ' -f1` instance_ip=`echo $line | cut -d ' ' -f2` instance_port=`echo $line | cut -d ' ' -f3` if [ $instance_ip = "192.168.1.1" ] || [ $instance_ip = "192.168.1.2" ] then echo "[$instance_name $instance_ip $instance_port]" ssh redis@$instance_ip "ls -l /data/redis/$instance_name.rdb" if [ $instance_ip = "192.168.1.3" ] || [ $instance_ip = "192.168.1.4" ] then echo "[$instance_name $instance_ip $instance_port]" ssh redis@$instance_ip "ls -l /var/lib/redis/$instance_name.rdb" if [ $instance_ip = "192.168.1.5" ] || [ $instance_ip = "192.168.1.6" ] then echo "[$instance_name $instance_ip $instance_port]" ssh redis@$instance_ip "ls -l /var/lib/redis/$instance_name.rdb" done | cs |
스크립트를 실행시켜 보았는데,
파일의 한 줄만 읽고 스크립트는 종료되었습니다.
1 2 3 4 | # sh test.sh [test3 192.168.1.3 6000] -rw-rw-r-- 1 redis redis 4096 Oct 12 16:27 /var/lib/redis/test3.rdb | cs |
왜?
ssh 는 standard input 으로 입력된 값을 모두 읽게 됩니다.
그러므로 앞으로 읽어야 하는 줄들이 모두 무시되게 됩니다.
이를 해결하기 위해서는 ssh 명령어 뒤에 '< /dev/null ' 을 입력하여 표준입력을 무시하도록 해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | cat d20201015_redis_master.txt | while read line do instance_name=`echo $line | cut -d ' ' -f1` instance_ip=`echo $line | cut -d ' ' -f2` instance_port=`echo $line | cut -d ' ' -f3` if [ $instance_ip = "192.168.1.1" ] || [ $instance_ip = "192.168.1.2" ] then echo "[$instance_name $instance_ip $instance_port]" ssh redis@$instance_ip "ls -l /data/redis/$instance_name.rdb" < /dev/null fi if [ $instance_ip = "192.168.1.3" ] || [ $instance_ip = "192.168.1.4" ] then echo "[$instance_name $instance_ip $instance_port]" ssh redis@$instance_ip "ls -l /var/lib/redis/$instance_name.rdb" < /dev/null fi if [ $instance_ip = "192.168.1.5" ] || [ $instance_ip = "192.168.1.6" ] then echo "[$instance_name $instance_ip $instance_port]" ssh redis@$instance_ip "ls -l /var/lib/redis/$instance_name.rdb" < /dev/null fi done | cs |
1 2 3 4 5 6 7 8 | # sh test.sh [test3 192.168.1.3 6000] -rw-rw-r-- 1 redis redis 4096 Oct 12 16:27 /var/lib/redis/test3.rdb [test1 192.168.1.1 6000] -rw-rw-r-- 1 redis redis 4096 Oct 12 16:31 /data/redis/test1.rdb [test2 192.168.1.2 6000] -rw-rw-r-- 1 redis redis 4096 Apr 27 2017 /data/redis/test2.rdb # | cs |
'Linux > 실습하기' 카테고리의 다른 글
[LINUX] 물리메모리를 전부 사용하지 않았는데 SWAP 영역을 사용하는 원인 (1) | 2020.09.23 |
---|---|
[LINUX] 비밀번호를 출력하지 않는 스크립트 만들기 (0) | 2018.09.11 |
[LINUX] GOLDILOCKS 온라인 백업 스크립트 만들어보기 (0) | 2018.07.13 |
[LINUX] CENTOS 에 JEUS 웹서버 설치하기 (0) | 2018.06.28 |