2012-12-04 3 views
0

원격 호스트에 ssh이라는 bash 스크립트가 있고 운영 체제 (bash의 case 문)에 따라 파일을 만듭니다. OS X에서이 코드를 실행할 때 Darwin 값을 평가하고 eg2.txt 파일을 만들 것을 기대합니다. 그러나 어떤 이유로 Darwin을 선택하지 않고 *을 선택한 다음 none.txt 파일을 만듭니다. 비슷한 문제가있는 사람이 있습니까? 누군가가 무엇이 잘못되었는지 말할 수 있습니까?Bash 스크립트 및 ssh 오류

#!/bin/bash 
ssh -l user $1 "cd Desktop; 
opname=`uname -s`; 
echo \"first\" > first.txt 
case \"$opname\" in 
    "Darwin") echo \"Darwin\" > eg2.txt ;; 
    "Linux") sed -i \"/$2/d\" choice_list.txt ;; 
    *) touch none.txt ;; 
esac" 

P. 이 코드는 주로 Mac에서 실행됩니다.

답변

2

문제는 $opname 변수가 Bash 인스턴스에 의해 처리되도록 SSH를 통해 전달되는 대신 ssh (즉, 클라이언트 측에서)을 실행하는 Bash 인스턴스에 의해 확장됩니다 (빈 문자열로). 서버 측. 당신이 \를 사용하여 $을 인용 수있는 다른

#!/bin/bash 
ssh -l user $1 'cd Desktop; 
opname=`uname -s`; 
echo "first" > first.txt 
case "$opname" in 
    Darwin) echo "Darwin" > eg2.txt ;; 
    Linux) sed -i "/$2/d" choice_list.txt ;; 
    *) touch none.txt ;; 
esac' 

나 :

#!/bin/bash 
ssh -l user $1 "cd Desktop; 
opname=`uname -s`; 
echo \"first\" > first.txt 
case \"\$opname\" in 
    "Darwin") echo \"Darwin\" > eg2.txt ;; 
    "Linux") sed -i \"/\$2/d\" choice_list.txt ;; 
    *) touch none.txt ;; 
esac" 
+0

감사가 – joque

+0

@joque 작동

이 문제를 해결하려면, 당신은 작은 따옴표 대신 큰 따옴표를 사용할 수 있습니다 : 천만에요! – ruakh