![在 tcsh 中自动完成时,我可以引用之前的参数吗?](https://linux22.com/image/42362/%E5%9C%A8%20tcsh%20%E4%B8%AD%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90%E6%97%B6%EF%BC%8C%E6%88%91%E5%8F%AF%E4%BB%A5%E5%BC%95%E7%94%A8%E4%B9%8B%E5%89%8D%E7%9A%84%E5%8F%82%E6%95%B0%E5%90%97%EF%BC%9F.png)
我试图在这里进行一些有效的自动完成,但遇到了一些障碍。
我有一个可以同时设置两件事的命令。第一个列表相对较小,但第二个列表如果不经过第一个列表的过滤,就会大得难以管理。
我想要做的是将第一个参数已经输入或自动完成的内容传递给第二个自动完成命令......
complete job 'p/1/`listJobs`/' 'p/2/`listTasks`/'
我想要做的是将已为第一个参数输入的作业传递给“listTasks”命令。
知道我该怎么做吗?
干杯
(这是我的旧 SuperUser.com 问题的转发,但没有人回答过......可以找到 SuperUser 问题这里)
答案1
这是我能找到的最佳选择:
complete job 'p/1/`listJobs`/' \
'p/2/`set cmd = ( $COMMAND_LINE ); listTasks $cmd[$#cmd]`/'
它依赖于一个名为 的变量$COMMAND_LINE
,该变量在我的 Ubuntu 系统上可用,但我不确定它是否是标准的。
从版本调用的命令
...
设置了附加环境变量,变量名称为 COMMAND_LINE,包含(如其名称所示)当前(已输入)命令行的内容。可以检查并使用自定义脚本中的 COMMAND_LINE 变量的内容来构建更复杂的补全(请参阅此包中包含的 svn(1) 补全)。
如果做不到这一点,您将尝试历史扩展,例如!!
或!#$
,但我不确定这是否可行。