bash 스크립트를 통해 여러 Linux 호스트에서 localhost로 디렉터리를 가져오려고 합니다. 그러나 이 hostname
명령은 원격 호스트 대신 로컬 호스트의 출력을 표시합니다. 모든 서버의 디렉터리 구조는 /home/user/HOSTNAME-BCKP입니다.
#!/bin/bash
for i in $(cat hosts);
do
scp -r $i:/home/user/`hostname`-BCKP/home/user/ALL-BCKPs/;
done
답변1
원한다면 hostname
- 명령 표시외딴호스트 이름을 사용하려면 원격 호스트에서 실행해야 합니다.
이를 연관 배열로 읽어서 반복할 수 있습니다.
#!/bin/bash -
declare -A myhosts
for item in $(cat hosts); do
myhosts[$item]="$(ssh $item 'hostname')"
done
for key in "{!myhosts[@]}" ; do
scp -r $key:/home/user/${myhosts[$key]}-BCKP /home/user/ALL-BCKPs/
done
하지만 이 작업을 여러 번 수행하려면 각 줄에 호스트와 호스트 이름 쌍이 포함된 파일을 만드는 것이 좋습니다.
while 루프에서 읽을 수 있습니다.
while read -r myhost myhostname; do
# do something with $myhost and $myhostname
done < yourfile