以下命令打印正在播放的歌曲的路径。
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 选项来避免运行任何命令)。