如何在fish Shell中移除命令输出的尾随换行符?解决Git提交报错
问题分析与解决
你的命令存在两个关键问题:
- 拼写错误:把
string误写成了strig,这是导致命令执行异常的直接原因之一。 - 逻辑错误:
string split0是用于处理null字符分隔的输出流,但你的函数输出是换行分隔的内容,用这个命令会将每一行转换为null分隔的元素;后续string sub -e -1取到的是最后一个空元素(原输出末尾的换行被处理后产生的空值),最终传给git commit -m的是空字符串。Git发现-m参数后没有有效内容,就会默认把后续输入当成要提交的路径,从而抛出“空字符串不是有效路径”的错误。
正确的处理方式
根据你“移除提交消息中换行符”的需求,提供两种常用解决方案:
方案1:直接替换所有换行符为空格
git commit -m (format-commit-message "new commit" | string replace -a '\n' ' ')
string replace -a '\n' ' '会把输出中的每一个换行符都替换成空格,将多行内容合并为一行。
方案2:先过滤空行再合并
如果提交消息中的空行是多余的,可以先过滤掉再合并:
git commit -m (format-commit-message "new commit" | string filter -n | string join ' ')
string filter -n:只保留非空的行,过滤掉所有空行string join ' ':将过滤后的行用空格连接成单行字符串
这样处理后,传给git commit -m的就是符合要求的无换行提交信息,不会再触发错误。
内容的提问来源于stack exchange,提问作者Martin Drozdik
相关产品推荐
相关产品推荐

