SSH를 사용하여 원격 서버에서 명령을 실행할 수 없습니다

SSH를 사용하여 원격 서버에서 명령을 실행할 수 없습니다

패턴 검색을 위해 SSH를 사용하여 원격으로 grep 명령을 실행하고 싶습니다.

아래 스크립트를 사용했지만 작동하지 않습니다. 제안해주세요.

read -p "please enter the pattern:" pattern
host=hostname
ssh $host -t 'cd /path ; zgrep $pattern *| grep Status=completed;

답변1

귀하의 코드:

read -p "please enter the pattern:" pattern
host=hostname
ssh $host -t 'cd /path ; zgrep $pattern *| grep Status=completed;
  1. 아마도 백슬래시를 올바르게 읽으려면 이 작업을 수행 read해야 할 것 입니다.read -r -p ... pattern
  2. 이것을 실제 호스트 이름에 대한 자리 표시자로 사용하고 있는지 (내 생각에는) 이것이 유틸리티 실행을 위한 값을 얻을 것이라고 hostname생각하는지 확실하지 않습니다 .hosthostname
  3. 마지막 줄에는 끝나지 않은 작은따옴표 문자열이 있습니다. 작은따옴표로 끝나더라도 $pattern작은따옴표로 인해 변수가 확장되지 않습니다. 이것은 cd불필요합니다. 변수 $host확장에는 따옴표가 필요하며 명령줄 플래그는 호스트 이름 앞에 와야 합니다(그러나 -t이 경우는 아님).

제안:

read -r -p "please enter the pattern:" pattern
host=hostname
ssh "$host" find /path -type f -name "'*.gz'" -exec zgrep -e "'$pattern'" /dev/null {} '\;' | grep -F 'Status=completed;'

여기의 명령은 find원격 호스트의 모든 파일을 찾고 *.gz해당 파일에서 패턴을 찾는 데 사용됩니다. 그런 다음 결과는 마지막 결과를 기준으로 추가로 (로컬로) 필터링됩니다. 이것이 마지막 패턴의 일부가 되어야 하는지 잘 모르겠습니다. 거기에 없으면 삭제하십시오./pathzgrep$patterngrep;

"'*.gz'"세련된 인용을 위해 사용이 필요합니다 . "'$pattern'"로컬 셸은 호출 전에 첫 번째 수준의 따옴표를 제거하고 원격 측 명령에 대해 and (값이 무엇 이든)를 ssh남겨 둡니다 .'*.gz''...'$patternfind

일치하는 파일의 파일 이름이 출력에 표시되도록 항상 두 개 이상의 파일( 및 에서 다른 파일 하나 )을 수신하는지 확인 zgrep ... /dev/null ...합니다 .zgrep/dev/null/path

grep -F주어진 문자열을 정규식 대신 고정 문자열로 처리합니다. 문서화와 처리 속도 향상을 위해 여기에 있습니다.

관련 정보