Shell
如何在不實際使用萬用字元或 shell 擴展的情況下進入 foo-* 文件夾?
短篇故事
我正在尋找進入第一個找到的
foo-something
目錄的命令,例如:cd foo-*
但不使用萬用字元(或其他特殊的 shell 字元)。
很長的故事
作為遠端 drush 建構腳本的一部分,我試圖找到輸入文件夾的方法,其中文件夾名稱可以更改,但它有共同的前綴。相同的範例:
drush -y dl ads
或drush -y dl ads --dev
下載ads-7.x-1.0-alpha1
或ads-7.x-1.x-dev
)。為了使事情變得更棘手,該命令不能包含萬用字元或轉義分號,因為 drush 大量轉義 shell 別名。
所以
ls *
被逃入ls '\''*'\'''
並以Command ls '*' failed.
錯誤告終。我也嘗試過使用
find
,但我不能使用-exec
主要,因為分號需要轉義,而 drush 將其雙重轉義為 ('\''\;'\''
)。因此,如果可能的話,我希望在
foo-*
不使用萬用字元(或任何其他特殊字元、參數擴展、命令替換、算術擴展等)的情況下進入文件夾。我相信 shell 轉義的邏輯就在這裡,它的工作方式
escapeshellarg()
與在 Linux 上的工作方式相同。它的作用是轉義每個參數。
drush mung 反引號和豎線嗎?如果沒有,您可以使用
cd `ls | grep foo- | head -n 1`
如果反引號不起作用,但是
|
,$
和do(
,)
那麼您可以將上面的內容更改為cd $(ls | grep foo- | head -n 1)
如果
|
不工作,但是$
,(
並且)
做,那麼你可以做cd $(myprog)
myprog
您編寫的用於確定目錄名稱的腳本在哪裡。另外-我不明白您如何可以
find
用來幫助您做 acd
,但是,您能-exec
以 a結尾+
嗎?
您也可以嘗試使用
locate
實用程序,例如:updatedb -o ~/tmp.db -l0 -U $PWD; cd $(locate -d ~/tmp.db -l 1 -b -r foo-)
對於更複雜的正則表達式模式檢查
info locate
。