2012-12-15 117 views
0

从Linux终端的命令:sh脚本逃逸

ls application/js/{a*,b*,c*,d*,e.pocket-secure} 

将列出应用/ JS目录以a开头的所有文件,B,C,d或e.pocket安全。

如果我把在doit.sh该命令并执行:

sh doit.sh 

我得到:

ls: cannot access application/js/{a*,b*,c*,d*,e.pocket-secure*}: No such file or directory 

我觉得{}是混乱的shell解释,但我想引用(单| double),并试图逃脱{}无济于事。

回答

2

当你在终端上键入它,我怀疑你是在bash。当您运行sh doit.sh,你改变了外壳的特性,或者是因为bash是在兼容模式下,或者因为你正在使用类似dash。试试bash doit.sh

+0

你的建议是什么工作,但它是一部分2-300行脚本,我不想重写/重新检查转换为不同的解释器。 –

+0

如果是这种情况,通过在脚本中添加以下内容即可解决问题:#!/bin/sh' –

+0

如果您需要使用'sh',那么您可能必须使用5个单独的'ls'命令,然后合并结果。 –

1

只使用bash解释器这个语法的工作,你可以试试这个

#/bin/bash 
ls application/js/{a*,b*,c*,d*,e.pocket-secure} 

chmod +x doit.sh 
./doit.sh 

OR

只需键入该上壳

bash doit.sh