2012-12-15 166 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