将命令的输出通过管道传输到 rm 命令

Dil*_*war 9 command-line

以下命令打印正在播放的歌曲的路径。

mpc | head -n 1 
songs/oldSongs/Mukesh_D/041 KANHAIYA = YAAD AAYI ADHI RAAT KO.mp3
Run Code Online (Sandbox Code Playgroud)

我可以通过修改我用来打印它的命令来删除这个文件吗?

Sté*_*las 16

要回答更一般的问题,工作就是xargs在标准输入上获取单词列表并将其转换为命令的参数列表。

但是,xargs期望列表是空格、制表符和换行符(以及可能更多的空白字符,具体取决于语言环境和 xargs 实现)分隔的单词列表,其中使用单引号、双引号和反斜杠来转义这些分隔符(在有关方面具有不同的行为)通过不同的 xargs 实现嵌套那些)。

如果输入是以换行符结尾的列表,则将其转换为 xargs 期望的格式的规范方法是转义每个字符(尽管只有反斜杠、单引号、双引号、下划线(可能)、空格和制表符(可能还有)其他空格(如果不在 C 语言环境中)是必需的)但带有反斜杠字符的换行符,我们可以使用sed.

mpc | head -n 1 | sed 's/./\\&/g' | xargs rm --
Run Code Online (Sandbox Code Playgroud)

请注意,某些xargs实现对 stdin 上的最大行长度的限制相当低,因此您可能只想用这些字符转义必要的字符。

xargs至少使用 GNU ,你不需要这样做,你可以这样做:

mpc | head -n 1 | xargs -rd '\n' rm --
Run Code Online (Sandbox Code Playgroud)

(如果输入为空,还使用 ​​GNU 特定的 -r 选项来避免运行任何命令)。