我有阅读障碍,所以我使用 fish 作为我的 shell,因为它在预测、纠正和别名方面很出色。我正在尝试弄清楚如何创建一个别名,其中变量在后面,然后是别名的其余部分。
例如:现在我有别名ppa="sudo add-apt-repository"
。我只需输入ppa
然后复制 repo 的ppa:foo-bar/ppa之后,最终sudo apt-add-repository ppa:foo-bar/ppa
这足够方便,所以如果下一部分太难或者根本无法完成,不用担心。
我想将此别名修改为ppa="sudo add-apt-repository"
; upd (where upd is also aliased as
upd="sudo apt update"`)。有什么办法吗?如果我说得不够清楚,下面是我想在这种情况下使用 cli 执行的操作:
带变量的别名:
$ ppa [variable]
带变量的解码别名:
$ sudo sudo add-apt-repository [variable] ; upd
如上示例:带变量的别名:
$ ppa ppa:foo-bar/ppa
解码后的带变量的别名:
$ sudo sudo add-apt-repository ppa:foo-bar/ppa ; upd
有办法吗?同样,如果没有办法或者如果方法太复杂,也没问题。
非常感谢!我非常感激!
〜埃夫
附言——如果有人希望我帮助他们为他们经常输入的命令创建自己的别名,并希望使用 fish 来实现,请随时提出。我很乐意提供帮助!
答案1
不,您不能使用 fish 别名来执行此操作。但是 fish 函数要好得多:
function upd
sudo apt update
end
funcsave upd
function ppa
sudo add-apt-repository $argv
upd
end
funcsave ppa
将其复制并粘贴到您的终端中就可以了。
请记住
alias foo=bar
只是一种快捷方式
function foo; bar $argv; end
答案2
这已经很老了,所以可能对 OP 没什么用,但可以做到几乎正如 OP 所希望的那样,甚至可能是更有用的东西。
鱼有缩写,我更喜欢尽可能使用别名或函数,因为:
- 显示实际命令,以便我仍然记得实际的命令是,这在购买新电脑、新工作或使用别人的电脑时很有用。
- 它具有
--set-cursor
充当“光标中缀”的作用,解决了 OP 的问题。
abbr
和--set-cursor
我使用多个 Kubernetes 命名空间(环境),但 90% 的时间都在使用我们称之为的开发命名空间hot-deploy
。因此,我做了一个缩写,以始终添加命名空间:
abbr -a k --set-cursor -- "kubectl % -n hot-deploy"
这使我只需输入字母k
(和空格)即可显示以下命令,将光标置于kubectl
和之间-n
:
kubectl <CURSOR HERE> -n hot-deploy
我也用许多其他缩写做过同样的操作,甚至还使用了一个技巧,使得按下空格后,光标位于我输入内容的末尾:
abbr -a rep --set-cursor -- "cd /home/mike-williamson/repos/myapp/%"
把放在%
最后,意味着输入rep
+ 空格后,会输出:
cd /home/mike-williamson/repos/myapp/<CURSOR HERE>
然后我就可以输入rep
+ 空格,然后立即输入fro
+ tab,它就会进入frontend
(或者输入任何内容让我进入我想要去的子目录)。
我经常使用缩写,有时我需要用缩写abbr -l
来列出它们,因为我已经忘记它们了。
答案3
我会为此创建一个脚本,并让别名调用该脚本。类似这样的脚本(未经测试):add_ppa_and_update.sh
#!/bin/bash
# Take first argument and use it to add the repository
add-apt-repository $1
# Update
apt update
现在授予脚本运行权限sudo chmod 755 add_ppa_and_update.sh
并创建使用 sudo 调用该脚本的别名sudo add_ppa_and_update.sh [variable]
。