[Solved] 在配置文件中,引号引用并且内嵌命令,

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
numbchild
帖子: 107
注册时间: 2010-03-16 12:34

[Solved] 在配置文件中,引号引用并且内嵌命令,

#1

帖子 numbchild » 2011-07-19 10:48

execute_on_song_change = "notify 'ncmpcpp' '`ncmpcpp --now-playing`' "
这个是我在ncmpcpp播放器里的一条设置,但是得到的结果却是ncmpcpp ncmpcpp --now-playing 。
这里,最外面的引号是必须的,里面我希望用 ` ` 来执行命令,但是 ` ` 外面的 ' ' 似乎无法取全部的结果。( ncmpcpp --now-playing 的输出是 (3:44) 林俊杰 - 星球 )
notify 是我的一个脚本, 后面要跟两个变量, $1 $2. 这里$1是ncmpcpp $2则是ncmpcpp --now-playing的结果。

求解决办法。
上次由 numbchild 在 2011-07-19 12:52,总共编辑 1 次。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 在配置文件中,引号引用并且内嵌命令,

#2

帖子 eexpress » 2011-07-19 10:49

``的外面,别带' '了。
● 鸣学
头像
numbchild
帖子: 107
注册时间: 2010-03-16 12:34

Re: 在配置文件中,引号引用并且内嵌命令,

#3

帖子 numbchild » 2011-07-19 11:16

eexpress 写了:``的外面,别带' '了。
因为$2带有空格还有其他的符号,比如(4:19) 许嵩 - 玫瑰花的葬礼。 所以要用shell的$@之类的。可是我不知道是哪个。
ee, 问一下,shell里引用全部是$@还是其他的? 我测试了$@不行。error(Invalid number of options.)
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 在配置文件中,引号引用并且内嵌命令,

#4

帖子 eexpress » 2011-07-19 12:24

那也试试转义\" \"。可能\' \' 也可以。
mocp里面,也使用onsongchange

execute_on_song_change = "notify 'ncmpcpp' \"`ncmpcpp --now-playing`\" "
execute_on_song_change = "notify 'ncmpcpp' \'`ncmpcpp --now-playing`\' "

你试试。

通常,你这接口,是提供给sh来跑的。通常要转义。
● 鸣学
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 在配置文件中,引号引用并且内嵌命令,

#5

帖子 fnan » 2011-07-19 12:36

这样带空格的参数传进去也被分割,除非把空格换成字符串,脚本里再换成空格。
(或者直接使用环境变量)
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
numbchild
帖子: 107
注册时间: 2010-03-16 12:34

Re: 在配置文件中,引号引用并且内嵌命令,

#6

帖子 numbchild » 2011-07-19 12:50

eexpress 写了:那也试试转义\" \"。可能\' \' 也可以。
mocp里面,也使用onsongchange

execute_on_song_change = "notify 'ncmpcpp' \"`ncmpcpp --now-playing`\" "
execute_on_song_change = "notify 'ncmpcpp' \'`ncmpcpp --now-playing`\' "

你试试。

通常,你这接口,是提供给sh来跑的。通常要转义。
恩,转义可以,\" 可以,但是\' 不行。
搞定了,谢谢ee和楼下哪位,楼下说的貌似很麻烦啊。。。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [Solved] 在配置文件中,引号引用并且内嵌命令,

#7

帖子 fnan » 2011-07-19 13:06

以前尝试用变量传带空格参数都失败,转义有效?试试。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [Solved] 在配置文件中,引号引用并且内嵌命令,

#8

帖子 fnan » 2011-07-19 14:00

c='1.sh "arg 1" "$(ls -C)"'
eval ~/$c
-2-
[arg 1]
[12345 arg2 ?b]
原来这样shell不用转义也可以,以前一直想不到。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
回复