2014-02-14 3 views
1

중앙 Linux 상자 (RHEL 6.3)에서 일련의 다른 zip 파일을 다른 Linux 호스트로 푸시 한 다음 각 대상 호스트에서 해당 파일의 압축을 풀려고합니다. 내 중앙 호스트는 hpdb1입니다.중첩 for 루프 관련 문제

#Push zip files to other hosts 
for i in {2..8}; do 
    scp -r /software/stage/*.zip [email protected]$i:/software/stage 
done 

#Unzip files to /software/stage 
for i in {2..8}; do 
    ssh hpdb$i "for f in /software/stage/*.zip; do unzip /software/stage/"$f" done"; 
done 

첫 번째 for 루프가 파일을 제대로 작동합니다. 루프 중첩을 실행하는 경우 그러나, 나는 다음과 같은 오류가 다음 $f 변수가 해석 가져 오지처럼

[[email protected] ~]# for i in {2..8}; do ssh hpdb$i "for f in /software/stage/*.zip; do unzip /software/stage/"$f"; done"; done 
unzip: cannot find or open /software/stage/, /software/stage/.zip or /software/stage/.ZIP. 
unzip: cannot find or open /software/stage/, /software/stage/.zip or /software/stage/.ZIP. 

보인다. 어떤 아이디어?

답변으로 업데이트 됨

이 코드는 작동합니다.

for i in {2..7}; do 
    ssh hpdb$i 'for f in /software/stage/*.zip; do unzip "$f" -d /software/stage; done'; 
done 

답변

1

내 첫 번째는하지만, 그래서 같은 다른 인용 부호를 사용하는 것입니다

for i in {2..8}; do ssh hpdb$i 'for f in /software/stage/*.zip; do unzip /software/stage/“$f”; done'; done 
+0

. 나는 이것이 대답이라고 생각한다. –

+0

Rob과 DopeGhoti, 너희들 대부분이 옳았지만 의로의 길에있어. 작은 따옴표로 파일을 찾을 수 있었지만 실행했을 때 다음 오류가 발생했습니다. unzip : 찾을 수 없거나 open /software/stage/software/stage/p13390677_112040_Linux-x86-64_1of7.zip 그래서 나는 /software/stage/*.zip 파일에서 구문을 hpdb $ i '로 변경했습니다. "$ f"를 압축 해제하십시오; 끝난'; done 그게 효과가 있었지만 모든 것을/root에 압축을 풉니 다. 압축 해제를 위해 -d 플래그를 사용하여 더 수정하여 챔피언처럼 일했습니다! /software/stage/*.zip에서 f를위한 hpdb $ i '; "$ f"-d/software/stage의 압축을 풉니 다. 끝난'; done – user3311061

2

문제는 중첩 된 따옴표 수 있습니다. 외곽 따옴표를 작은 따옴표로 묶어서 $이 원격 서버로 보내기 전에 확장되지 않도록해야합니다.

0

다른 답변에서 제안한 것과 같이 다른 따옴표를 사용할 수도 있지만 이는 가변적 인 확장 동작을 변경하며 경우에 따라 바람직하지 않을 수 있습니다.

당신은 단순히 백 슬래시를 미리 출원에 의해, 대신에 동봉 된 따옴표를 탈출 할 수 : 난 그냥 원래의 질문에 주석으로이 쓰기 거라고

for i in {2..8}; do 
    ssh hpdb$i "for f in /software/stage/*.zip; do unzip /software/stage/\"$f\"; done"; 
done 
+0

"다른 답변에서 제안한 것과 같이 다른 따옴표를 사용할 수도 있지만 변수 확장 동작을 변경합니다 ..."하지만 여기서 필요한 것은 정확히 무엇입니까. – glglgl