包含反引号的Linux管道数据

时间:2017-12-07 15:58:05

标签: linux awk sed ash

我将输出从一个命令输送到第二个命令:

mpc listall | mpc add

mpc listall返回以下数据(可以输出1行或更多行):

Dare - 16 - I´ll Be Your King.mp3

当把它管道到下一个命令时,似乎我的shell(BusyBox上的Ash)将'转换为星号,因为我收到错误

error adding Dare - 16 - I*ll Be Your King.mp3: No such directory

手动添加双引号有效!像这样:

mpc add "Dare - 16 - I´ll Be Your King.mp3"

所以,我尝试用sed和awk添加它们,但在这些情况下,反引号再次转换为星号:

mpc listall | sed 's/^/"/;s/$/"/'

返回:

"Dare - 16 - I*ll Be Your King.mp3"

所以,问题是,是否有办法将反引号或实际上任何字符原样传递给另一个没有转换的命令?

顺便说一下,显然,首先在文件名中包含这个字符是非常糟糕的,但我希望我的代码能够健壮并且能够处理抛出的任何内容。 < / p>

1 个答案:

答案 0 :(得分:1)

不是直接解决问题,而是使用python-mpd2库在python中解决(实际上更好,因为它使用API​​):

myMpdClient = MPDClient() 
myMpdClient.connect("localhost", 6600)  # connect to localhost:6600
myMpdClient.findadd('base','directory-name')
myMpdClient.close()

如果有人发布了有效的解决方案,我会接受实际提出的问题的解决方案,而不是这个问题。