2014-01-29 123 views
1

我試圖配置某一命令別名可編程選項卡完成正確的轉義:命令notes後點擊選項卡時 我希望shell從現有文件名在特定的路徑完成~/notes/notes_db/{some,files,here}爲TSCH可編程選項卡完成

在我.cshrc.user文件我已經設置了以下complete聲明:

012:通過鍵入 note [TAB]

complete note 'p/1/`ls ~/notes/notes_db/`/' 

唉,當我測試,tcshell與響應

note [TAB]無與倫比的`。

我試過了在backtics 中轉義ls命令的各種形式,但是我的嘗試都沒有奏效。

請任何人都可以解釋我應該如何妥善逃避這個聲明? 謝謝!

回答

0

有(至少)兩個問題:

  1. ls輸出包含斜線(/),其與complete命令的語法衝突。要繞過,請使用不同的分隔符,例如@
  2. ~在單引號內出現時不會被替換。改爲使用$HOME
  3. (只是猜測)如果有任何機會,你有ls定義爲一些別名(很常見),在你的complete裏面,你會想要不合理的ls。所以使用\ls

我們得到:

complete note '[email protected]@`\ls $HOME/notes/notes_db`@' 
+1

非常感謝你。 (它是選項1順便說一句) – ktopaz