SSH의 원격 ls 문서가 $()에서 작동하지 않는 이유는 무엇입니까? [복사]

SSH의 원격 ls 문서가 $()에서 작동하지 않는 이유는 무엇입니까? [복사]

원격 디렉터리의 파일 수를 계산하려고 합니다.
다음 코드가 있습니다.

ssh server.com<<RUNTHIS  
 FILE_COUNT=$(ls -AU /foo/bar/test_dir) 
 echo "$FILE_COUNT" > ~/file_count.txt   
RUNTHIS

이것을 실행하면 다음과 같은 결과를 얻습니다.ls: /foo/bar/test_dir No such file or directory
하지만디렉토리가 거기에 있습니다. ls /foo/bar/test_dir서버에 직접 액세스 하면 디렉토리가 나열됩니다.
다음도 작동하고 내용을 파일에 저장합니다.

ssh server.com<<RUNTHIS  
 ls -AU /foo/bar/test_dir > ~/file_count.txt
RUNTHIS

첫 번째 클립에 무슨 문제가 있나요?

답변1

bash에 있기 때문에 작동하지 않습니다 heredoc. 작은따옴표를 사용하여 RUNTHIS보호해 보세요.

ssh server.com<<'RUNTHIS' 
 FILE_COUNT=$(ls -AU /foo/bar/test_dir) 
 echo "$FILE_COUNT" > ~/file_count.txt   
RUNTHIS

답변2

문제는 $(ls)가 원격이 아닌 로컬로 확장된다는 것입니다.

이 시도...

ssh -2 -4 -i $key root@$ip -- 'ls -AU /foo/bar/test_dir | wc -l > ~/file_count.txt'

관련 정보