从 STDIN 获取文件并立即对所有这些文件执行某些操作的脚本

从 STDIN 获取文件并立即对所有这些文件执行某些操作的脚本

我经常想编辑由此产生的文件findfd像这样:

fd myfile | my_script

在我的脚本中,vim将使用 STDIN 中的所有文件作为参数运行,例如vim "myfile1" "myfile2".这些参数需要单独用双引号引起来,因为它们可能包含空格和其他特殊字符。

我尝试过以下方法:

files=""
while IFS=$'\n' read -r line; do
    files="$files $line"
done

file $files

该示例应file使用结果文件名作为参数运行。这有点有效,除了文件名中的空格会破坏它,并且我尝试以多种方式引用变量但没有成功。

如何使用以换行符分隔的输入作为带有空格的参数来运行命令?

答案1

正如您已经使用的那样bash,请使用数组。

files=()
while IFS=$'\n' read -r line; do
    files+=( "$line" )
done

file "${files[@]}"

您还可以查看xargs,使用换行符分隔符,行为应该类似。

相关内容