2011-10-05 1 views
0

는 내가 우분투 또는 임베디드 클라이언트 아라고에 로컬로 실행하면 완벽하게 작동하는 sed 명령이 있습니다ssh에서 sed를 사용하여 큰 따옴표와 변수가 포함 된 행을 원격으로 편집하는 방법은 무엇입니까?

나는 sed의 두 버전에 변화 줄 필요로하는 무슨이 정확하게 결과
sed -i 's/export PART="$1"/export PART="A"/' flash.sh 

:

export PART="$1" 

내 문제가

export PART="A" 

에, 나는 T로 네트워크를 통해 같은 명령을 실행해야 그는 임베디드 클라이언트는 그래서 쉬를 사용하여 아라고 클라이언트에, 떠들썩한 파티를 사용하여 우분투 서버에이 시도 :

이 포함 된 라인을 초래
ssh -n -o stricthostkeychecking=no [email protected] sed -i 's/PART="$1"/PART="A"/' flash.sh 

:

export PART=A"$1" 

대체 명령은 내부에 머물 필요 작은 따옴표는 큰 따옴표가 리터럴로 전달되도록하거나 두 문자열에 큰 따옴표를 유지하는 더 좋은 방법 일 수 있습니까? 이것은 $1이 비어있는 것처럼 무시되고있는 것처럼 보이고 "A"A으로 전달되고 PART= 끝을 대체합니다. 단일 및 이중 따옴표로 명령을 캡슐화하려고 시도했습니다.이 두 가지 결과는 같은 결과를 가져옵니다. 또한 백 슬래시로 따옴표를 이스케이프 처리했습니다. 동일한 결과입니다. 나는 이것이 단순하게 이해하지 못하는 sh와 함께 인용 확장을 가진 어떤 것이라고 생각한다. 아니면 ssh로 이해할 수없는 것입니다.

비슷한 다른 스레드를 읽었지만 원격으로 명령을 실행하기 위해 ssh를 사용하지 않았습니다. 나는 sed에서 더 이상 초보자가 아니지만이 사람은 나를 위해 꽤 수수께끼가되었다.

답변

1
ssh -n -o stricthostkeychecking=no [email protected] 'sed -i "s/export PART=\"\\\$1\"/export PART=\"A\"/" flash.sh' 
+0

이 방법은 완벽하게 작동합니다!감사합니다 Dimitre! 한 번에이 솔루션에 가깝지만 세 줄의 백 슬래시를 사용하여 $ 문자를 이스케이프 처리하는 방법에 대해 알지 못했습니다. 다시 한번 감사드립니다. – delliottg

0

앞뒤로 전환하여 필요한 인용문을 얻을 수 있습니다. 이

ssh -n -o stricthostkeychecking=no [email protected] sed -i 's/PART='"$1"'/PART="A"/' flash.sh 
# -------------------------------------------------------------------^^^^^^ 

을 시도하거나 당신이 정말로 DBL-따옴표로 둘러싸인 $ 1 값,

ssh -n -o stricthostkeychecking=no [email protected] sed -i 's/PART='\"$1\"'/PART="A"/' flash.sh 
# -------------------------------------------------------------------^^^^^^^^ 

을해야하는 경우 로컬 컴퓨터에서 제공하는 $ 1 (기계가 아닌 ssh'd)를 원하는가 , 권리?

이 정보가 도움이되기를 바랍니다.

P. 당신이 새로운 사용자로 보일 때, 당신이 그것을 받아 들일 수있는 것으로 표시하고/또는 유용한 답으로 + (또는 -)를주는 것을 기억하는 데 도움이되는 대답을 얻으면.

+0

안녕하세요 @shellter, 나는 $ 1을 전혀 확장하고 싶지 않습니다. –

+0

안녕하세요 @ DimitreRadoulov : 예, 당신 말이 맞을 것 같습니다. 나는 $ 1이 $ 1의 값을 전달하기를 원한다는 것을 의미하기 위해 "이것은 $ 1이 마치 비어있는 것처럼 무시당하는 것처럼 보입니다."하지만 이제는 그것이 의미가 있다는 것을 알 수 있습니다. 문자열 리터럴. 오 잘. 모두에게 행운을 빕니다! :-) – shellter

+0

도움을 주셔서 감사합니다. 위의 두 가지 방법을 시도해 보았습니다. 둘 다 이전 문제와 동일한 문제가 발생했습니다. 내보내기 부분 = "$ 1" 맞습니다. 파일이 있어야합니다. 인용 된 변수 : "$ 1". 나는 아래의 다음 해결책을 시도 할 것이고, 나는 다시보고 할 것이다. 다시 한번 감사드립니다. – delliottg

관련 문제