我想在 bash 中创建一个函数或别名或命令完成,它将命令作为“dfk-1234”或“DFK-nnnnn”(数字可以是 1 到 5 位数字,而不是零填充),然后运行命令“dfkp DFK-nnnn”。
论点应该逐字传递。“dfk-18875 cat file.txt”应该变成“dfpk DFK-18875 cat file.txt”。
我认为命令完成或选项卡扩展会起作用,但无法确定数字更改时该怎么做。
最好的方法是什么?一旦我可以处理主要的命令名称,我就可以处理其余的(大小写、参数等)。
我想在 bash 中创建一个函数或别名或命令完成,它将命令作为“dfk-1234”或“DFK-nnnnn”(数字可以是 1 到 5 位数字,而不是零填充),然后运行命令“dfkp DFK-nnnn”。
论点应该逐字传递。“dfk-18875 cat file.txt”应该变成“dfpk DFK-18875 cat file.txt”。
我认为命令完成或选项卡扩展会起作用,但无法确定数字更改时该怎么做。
最好的方法是什么?一旦我可以处理主要的命令名称,我就可以处理其余的(大小写、参数等)。
Bash 4.0引入了处理未找到的命令的新功能
command_not_found_handle
——如果该函数存在,它将调用名为 的函数。您可以使用该行为来拦截对名为 dfk-NNN 或 DFK-NNN 的“程序”的调用,并根据需要重新运行它们。由于我们已经依赖于 4.0 行为,因此我也使用了大写和小写参数扩展功能。如果你输入一个不存在的命令,bash 会用原来的命令行调用这个函数。该
case
语句将第一个参数小写,以便将它与dfk
所需的模式进行比较更简单。dfk-
如果命令以1、2、3、4 或 5 个字符开始和结束(将其收紧为您认为合适的数字),那么它——当前回显,用于调试,但随后——dfkp
使用第一个参数是初始 dfk 条目的大写版本,后面是命令行的其余部分。对于不匹配的命令,它失败
dfk-NNNN
并向 stderr 打印模拟的 bash 错误消息并返回 127。(这与默认行为匹配,就好像 command_not_found_handle 不存在一样)。示例会话(安装了回显调试,因为我没有实际的 dfkp 程序):