2016-11-30 1 views
0

원격 서버의 bash 스크립트를 통해 여러 명령을 실행하려고합니다. 특히 원격 서버에서 실행되는 for 루프가 문제를 일으킨다. 나는 문자를 제대로 이스케이프 처리하거나 $()를 사용하는 법을 모르기 때문에 그럴 것이라고 생각한다.원격 서버의 루프 용 Bash

다음은 코드입니다.

ssh (user)@(server) <<EOF 
sudo su - (username) 
whoami 
'for e in $(`ls -lrt /usr/jboss/jbosseap | awk '{print $9}' | grep multichannel`); 
do 
echo "$e"; 
done' 

분명히 이유로 사용자와 서버 이름을 제거하십시오. for 루프에만 집중하십시오. 루프 커맨드 라인 ($()없이)을 실행하면 잘 동작합니다. 그냥 원격 호출에 중첩하는 방법을 모르겠습니다.

대단히 고맙습니다.

+0

bash가'$ (..)','$ 9'와'$ e'를 먹지 않도록하려면 여기에 doc 터미네이터 ('ssh user @ host << "EOF")를 인용하십시오. 그런 다음 바로 실행하려는 코드를 넣을 수 있습니다 (여기서 한 것처럼 작은 따옴표로 이스케이프하지 않고) –

답변

0

당신은 당신이 같은 SSH로 파일을 파일 및 배관에 해당 스크립트를 넣어 더 좋을거야 ssh를 통해 실행하려는 복잡한 스크립트를 가지고있는 경우에 :

cat remote_script.sh | ssh [email protected] 

나 :

cat remote_script.sh | ssh [email protected] sudo -u username 

을 그리고 지금 당신은 탈출의 약 N 수준을 걱정할 필요가 없습니다.