为什么来自 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'

相关内容