Fish Shell创建别名时使用&&报错,试&/and仍无效求解决
在Fish Shell中创建包含多命令的别名解决方案
我之前也踩过这个坑!Fish Shell的语法和Bash/Zsh确实有差异,&&在Fish里不被支持,官方提到的and是正确方向,但你之前的写法没注意Fish的命令分隔规则,所以才失效。
先给你说清楚为什么之前的尝试不行:
- 用
&的话,是把git add .放到后台执行,这时候git commit会在git add还没完成索引更新时就运行,自然找不到要提交的文件,肯定失败。 - 直接写
git add . and git commit -m的话,Fish会把这整串当成一个命令来找,当然找不到,因为and是Fish里的命令分隔/逻辑判断关键字,需要和前一个命令用分号或者换行隔开才行。
下面给你两种可行的解决方法,第二种是Fish官方更推荐的:
方法1:修正Alias的写法
Fish的alias本质是函数的简写,所以要按照Fish的语法写命令,用分号分隔命令,再用and保证前一个命令成功才执行后一个:
alias gac 'git add .; and git commit -m'
使用的时候和你预期的一样:
gac "Fix login page bug"
方法2:定义Fish函数(更推荐)
对于需要传参或者逻辑更复杂的命令,Fish官方建议直接写函数,可读性和扩展性更好:
function gac # 先执行git add .,只有成功(退出码0)才继续执行commit git add . and git commit -m "$argv" end
如果想让这个函数每次启动Fish都能用,把它保存到~/.config/fish/functions/gac.fish文件里就行,Fish会自动加载这个目录下的函数文件。
这样不管是git add失败还是成功,逻辑都会正常工作——如果git add出错(比如没有权限),and就会跳过git commit,避免无效提交。
内容的提问来源于stack exchange,提问作者Manfred H
相关产品推荐
相关产品推荐

