我们正在尝试编写一个基于提交历史记录发布文章的脚本。我们运行了以下命令,而不是进行提交,它实际上将我们放入了python终端;
list = [1,2,3,4,5,6,7]
我们很好奇为什么会这样做,上面命令中的两个蟒蛇中的哪一个引起了这个问题。另外,当我们提交这样的提交时,我们如何防止这种情况。我们的脚本将生成的目标语言是markdown。 谢谢!
答案 0 :(得分:6)
这与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 -
例如。
答案 1 :(得分:4)
我建议您不要使用-m
标记并使用文本编辑器(默认情况下为vim)来编辑邮件。这将避免命令行将您的消息解释为命令。如果您不熟悉vim,可以根据自己的喜好设置文本编辑器。
P.S。在文本编辑器中编辑消息的另一个好处是,您可以更轻松地输入多行消息。当您拥有管理提交消息的团队约定时,这尤其有用。此外,像GitHub这样的服务在长单线提交消息方面表现不佳。
答案 2 :(得分:4)
Code-Apprentice提供了一个很好的选择。
如果您确实想在命令行上提供提交消息,则应该能够使用单引号而不是双引号:
git commit -m 'You can run this file using the `python` command in your terminal:\n```$ python blogplish.py\nThe script is working.```'
Bash(Ubuntu系统上的默认shell)doesn't process backticks in single-quoted strings。