我发现错误在意外令牌附近执行bash语法错误`('
我知道错误是由')引起的,但我认为将命令放在'之间。 ' 假设允许目录名中的括号。如何在不重命名的情况下解决此问题?
matlab / octave代码是:
syscmd=strcat({'bash -c '},{''''},{'cd '},dirpathpls,newdirname,{' && exec bash xfade.sh'},{''''}) %used to run script to join files in stretch directory
system(syscmd);
它产生以下内容:
bash -c 'cd /tmp/h1/clients/04212015142432811_Fs_1000_ahh/pls/03sox_a_Fs_1000_ahh_(000_bit)_(0.0000
0sig_in_deg)_to_(508_bit)_(30.00000sig_in_deg) && exec bash xfade.sh'
请注意: 它是从八度音阶3.8.1中调用的一个像matlab这样的数学程序
答案 0 :(得分:2)
在bash命令行中使用'
允许使用(
等保留字符而不转义;然而,这不是你在做什么。你'
中的所有内容都被传递给bash进行解释,bash并没有将'
s解释为命令的一部分。这样的事情应该有效:
syscmd=strcat({'bash -c '},{''''},{'cd "'},dirpathpls,newdirname,{'" && exec bash xfade.sh'},{''''}) %used to run script to join files in stretch directory
system(syscmd);
我不知道matlab / octave,但我希望传达这个想法。 "
应该有效地逃脱了parens。唯一的缺陷是,如果您的目录名称中包含$
或"
,或者您的目录名称中包含'
AND "
,那么会变得很傻。
答案 1 :(得分:0)
正如我在您关于此主题的其他问题中告诉您的:不要使用bash -c
;八度音阶没有必要运行一个外部命令,你只是通过尝试让你的生活更加艰难。
command=strcat({'cd '''},
strrep(strcat(dirpathpls,newdirname),
'''',
'''"''"'''''),
{''' && exec bash xfade.sh'})
system(syscmd);
两个主要区别:
sh -c
逃脱的运作方式:
POSIX shell中的单引号字符串仅以下面的单引号结束。要在其中插入文字单引号,需要结束单引号字符串,然后输入不同的引用类型。因此:
'"'"'
...其中第一个'
结束先前的引用类型; "
输入双引号上下文(其中可以识别单引号文字; '
后面是您的文字单引号字符;后面的"
结束双引号上下文,最终'
恢复单引号上下文。
对于Octave的语法,将'
加倍到''
,这一切都变得更加复杂;这是一个人得到的方式
strrep(content, '''', '''"''"''''')
...用'
s替换所有'"'"'
。