【问题标题】:How to remove single quotes while running in the shell script如何在 shell 脚本中运行时删除单引号
【发布时间】:2020-06-28 13:05:15
【问题描述】:

我正在尝试为已修改文件以及未修改文件插入提交消息,但提交失败。

 git commit -m "${commit_mmes}" "${fil}" $(git ls-files | grep "\.txt" | tr '\n' ' ' | awk '{$1=$1};1')

 git commit -m 'Master Merge-Commit message' music/file1.mp3 'music/file2.txt music/file4.txt3music/file5.txt music/file4.txt'

git ls-files 命令的响应仍然如下

 'music/file2.txt music/file4.txt3music/file5.txt music/file4.txt'

如何去除?

【问题讨论】:

  • 能否请您发布git ls-files inn 您的问题的示例输出,然后让我们知道,我很确定我们可以在一个命令中完成。完成问题编辑后,请告诉我们。
  • echo $(git ls-files | grep "\.txt" | tr '\n' ' ' | awk '{$1=$1};1')music/file2.txt music/file4 .txt3music/file5.txt 音乐/file4.txt
  • 从控制台运行时,响应没有单引号,但我在 bash 脚本中运行相同的命令 git 将其视为字符串作为单个 txt 文件并失败
  • 错误:pathspec 'music/file2.txt music/file4.txt3music/file5.txt music/file4.txt' 与 git 已知的任何文件都不匹配。 --- 这是回应
  • 我没有 git,所以无法测试命令,我想我可以帮助你现有的命令;有 git console 的人可以在这里为您提供更好的帮助。

标签: linux git awk sed tr


【解决方案1】:

git ls-files 对“不寻常”字符进行编码,除非给出-z

如果没有 -z 选项,则引用带有“不寻常”字符的路径名,如配置变量 core.quotePath 的说明(参见 git-config[1])。使用 -z 文件名逐字输出,行以 NUL 字节终止。

另外,git ls-files 无需 grep 即可直接过滤。

所以你可以这样做:

git ls-files -x '*.txt' -i -z |\
xargs -0 git commit -m "${commit_mmes}"

【讨论】:

    【解决方案2】:

    我发现了问题,之前分配的 IFS 值没有取消设置或删除。因此它一直在shell脚本中使用。 删除 IFS 后,我就可以提交文件了。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2018-06-23
    • 2011-03-26
    • 1970-01-01
    • 2019-12-29
    • 2023-03-31
    相关资源
    最近更新 更多