gpt4 book ai didi

python - 终端在尝试提交 Git 时意外运行了命令

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:17 25 4
gpt4 key购买 nike

我们正在尝试编写一个脚本来根据提交历史发布文章。我们运行了以下命令,它实际上并没有提交,而是让我们进入了 Python 终端:

cchilders:~/blogplish (master) 
$ git commit -m "You can run this file using the `python` command in your terminal:\n```$ python blogplish.py\nThe script is working.```"
Python 2.7.12 (default, Jul 1 2016, 15:12:24)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

我们很好奇它为什么这样做,上面命令中的两个 Python 中的哪一个导致了这个问题。另外,当我们像这样提交时,我们如何防止这种情况发生。我们的脚本将生成的目标语言是 markdown。

最佳答案

这与 Python 本身无关,也与 Git 无关,而与您的 shell(命令行解释器)有关。

大多数 Unix-ish shell 都有一些语法特征:

  • 单引号是“强引号”,防止几乎所有或所有扩展,并且仅由另一个单引号结束。
  • 双引号是“弱引号”,防止某些 扩展,但特别允许变量值替换,如$var和反引号扩展,如 `command` .但是请注意,双引号引用单引号,所以 "he said 'hello'"保留内部单引号。

在这种情况下,:

"... `python` ..."

部分告诉您的 shell 运行 python并查看它在标准输出上产生了什么。无论那是什么,都会在那个时候被替换。

(这种反引号扩展使用起来很棘手。如果你想要它,通常最好使用 $(...) 代替,因为括号帮助人们弄清楚命令中的内容,并且嵌套变得明显:reprocess $(process --files $(ls)) 表示:

  • 运行ls
  • 使用它的输出作为参数,运行process --files
  • 使用它的输出作为参数,运行reprocess

如果ls版画 README hello.txt ,这就像运行 process --files README hello.txt .随便process然后将打印拼接到 reprocess 的参数中.)

要完成此处的项目,首先所有 反引号表达式将按顺序运行和拼接。有四对反引号:

`python`
``
`$ python blogplish.py\nThe script is working.`
``

其中两个是空的,所以它们不运行也不拼接任何东西。一跑python ,最后一次运行 $ ,这可能会产生:

$: not found

但在 shell 到达那个点之前,它必须首先完成第一个 python (然后运行空命令)。

最后,正如其他人提到的,您可以在没有 -m 的情况下运行,或使用更强的引用变体 -m .还有另一种选择,为此我们需要 the git commit documentation : 可以使用 -F <file> 运行提交或 --file=<file>从准备好的文件中读取消息。你甚至可以使用 -F -从标准输入读取消息:

printf '%s\n\n%s\n' 'commit subject' 'commit message body' | git commit -F -

例如。

关于python - 终端在尝试提交 Git 时意外运行了命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45396080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com