正确转义tsch可编程选项卡完成

时间:2014-01-29 14:53:21

标签: escaping csh tcsh tab-completion complete

我正在尝试为某个命令别名配置可编程选项卡完成: 在命令notes后按Tab键时,我希望shell在特定路径~/notes/notes_db/{some,files,here}下的现有文件名中完成

在我的.cshrc.user文件中,我设置了以下complete声明:

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

当我通过输入note [TAB]进行测试时,tcshell会回复:

  

注意[TAB]不匹配`。

我尝试了各种形式的逃避ls命令在backtics中 但我没有尝试过。

拜托,任何人都可以解释我应该如何正确地逃避这一宣言? 谢谢!

1 个答案:

答案 0 :(得分:0)

有(至少)两个问题:

  1. ls的输出包含斜杠(/),它与complete命令的语法冲突。要绕过,请使用其他分隔符,例如@
  2. 出现在单引号内时,
  3. ~不会被替换。请改用$HOME
  4. (只是猜测)如果您ls被定义为某个别名(非常常见),则在complete内部您希望使用无法使用ls。因此,请使用\ls
  5. 我们得到:

    complete note 'p@1@`\ls $HOME/notes/notes_db`@'