在config.fish中配置abbr缩写时命令被意外执行如何解决
问题原因
- 你定义abbr时没有将需要展开的整段命令序列用引号包裹,fish在解析配置文件行时,会把
&&当做当前行的命令分隔符直接执行,而不是把它当做abbr展开内容的一部分。
你当前的写法等价于执行两个逻辑关联的命令:- 先执行
abbr --add -g build_clean ./gradlew clean build copyEar - 只要上一步执行成功,就立刻执行后面的
docker-compose down --remove-orphans && docker-compose up --build,这就是你启动fish就触发命令报错的核心原因。
- 先执行
修复方案
- 把abbr需要展开的整段命令用单引号包裹起来,让fish把整段内容当做abbr的参数处理,而不是当场解析执行,修改后的配置如下:
set PATH ~/.node/bin $PATH set PATH ~/bin/ $PATH set -x NODE_TLS_REJECT_UNAUTHORIZED 0 set JAVA_HOME $JDK_HOME set GRADLE_USER_HOME ~/.gradle if status --is-interactive abbr --add -g build_clean './gradlew clean build copyEar && docker-compose down --remove-orphans && docker-compose up --build' end
- 这里优先使用单引号是因为单引号内的所有特殊字符(包括
&&、$等)都不会被fish当场解析,会完全保留为abbr的原始展开内容,符合别名定义的预期。如果你的展开内容里需要用到提前解析的变量,也可以用双引号包裹,但要注意转义里面不需要提前解析的特殊字符。
内容的提问来源于stack exchange,提问作者spartanhooah
相关产品推荐
相关产品推荐

