我正在尝试计算远程目录中的文件数量。
我有以下代码:
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'