
이 두 단어가 포함된 파일을 디렉토리에서 검색하고 싶습니다.단어 1그리고단어 2. 로컬 디렉토리에서 검색하려는 경우 다음 명령을 사용하면 정상적으로 작동합니다.
for FILE in pathToDirectory/*.txt; do grep -q word1 $FILE && grep -q word2
$FILE && echo $FILE; done
원격 호스트에서는 변수를 사용할 수 없으니 어떻게 해야 하나요? 다른 스레드에서 알아냈어요(SSH를 통한 원격 for 루프) 사람들은 이 명령을 사용하여 서버에 연결한 다음 find 명령을 다음 따옴표 안에 넣습니다. 이와 유사합니다:
ssh -l username servername 'for FILE in pathToDirectory/*.txt; do grep -q word1 $FILE && grep -q word2 $FILE && echo $FILE; done'
그러나 이것은 여전히 나에게 효과가 없습니다.
지금 실행하는 명령은 다음과 같습니다(여전히 오류가 발생합니다).
ssh username@servername sh -c 'for FILE in /pathToDirectory/*.txt; do grep -q "word1" "$FILE" && grep -q "word2" "$FILE" && echo "$FILE"; done'
실수
FILE: -c: line 0: syntax error near unexpected token `newline'
FILE: -c: line 0: `for'
FILE: Undefined variable
답변1
기본 셸은 tcsh
원격 호스트에 있으므로 명시적으로 셸을 시작해야 할 수도 있습니다 sh
.
ssh username@servername sh -c 'for FILE in pathToDirectory/*.txt; do grep -q "word1" "$FILE" && grep -q "word2" "$FILE" && echo "$FILE"; done'
$FILE
또한 외국 문자가 포함된 파일 이름을 처리하려면 변수 확장을 큰따옴표로 묶어야 합니다 .
word1
또한 및 를 사용하더라도 이는 다음 word2
과 같습니다.grep
일반적인 표현설마성격. 파일에서 단어를 찾으려면 를 사용하십시오 grep -wF "word"
.
ssh
원격 호스트에서 주어진 명령을 실행하기 위해 로그인 쉘이 항상 실행되는 것 같습니다 tcsh
.정말 힘들다명령줄 스크립트에서 올바른 인용문을 얻으세요.
두 가지 솔루션(둘 다 마음에 들지 않음):
원격 호스트의 로그인 셸을 또는 같은
sh
유사한 셸로 변경합니다bash
. 호스트 시스템에 로그인하고 실행하여 이를 수행하십시오 .ksh
zsh
chsh
스크립트 파일에 스크립트를 넣고
ssh
다음 명령으로 실행합니다.ssh username@servername sh ./script.sh