如何使用shell脚本(和makefile?)

时间:2015-09-28 01:12:54

标签: python bash shell makefile

我已经阅读了大量的教程和stackex问题/答案,但显然我的问题太具体了,我的知识太局限于拼凑解决方案。

[编辑] 我的困惑主要是因为我的项目需要shell脚本和makefile来运行一个简单的python程序。我不确定为什么这是必要的,因为它似乎是如此迂回的做事方式。看起来makefile和脚本很可能只是为了让自动编程器满意,正如下面提到的受访者所说的那样。所以,我想这是最好用教授澄清的东西。我非常感谢答案 - 非常感谢您的帮助!

基本上,我想要做的是通过program.py(shell脚本)运行program.sh(我的源代码),这样当我在命令行中键入以下内容时

./program.sh arg1

它运行program.py并将arg1传递给程序,就像我在命令行中手动输入以下内容一样

$ python program.py arg1

我还需要自动将program.sh设置为可执行文件,以便$ chmod +x program.sh不必事先输入。

我已经阅读了提交的解决方案here,这非常有用,但这似乎要求使用.py扩展名执行该文件,而我的特定应用程序需要{{} 1}}扩展名,以便按上述要求运行。

为什么我要运行.sh文件的另一个原因是因为我还需要以某种方式包含一个makefile来运行程序以及脚本(所以我假设我必须在脚本中包含.sh命令吗?)。

老实说,我不确定为什么makefile是python程序所必需的,但是教程指示我们makefile对于分级脚本会更方便,我们应该简单地为makefile编写以下内容&# 39;内容:

make

非常感谢您提供任何帮助!

2 个答案:

答案 0 :(得分:4)

您可以使用以下命令编写shell脚本来调用python脚本:

$ python your_program.py $1

如果你只需要将一个参数传递给python脚本,假设该参数中没有空格。

如果你需要一个makefile,你可以让它使你的shell脚本可执行。

考虑到makefile是为了方便评分脚本,我怀疑你需要在脚本中添加一个调用,但我会检查它。评分脚本的作用可能是:

$ make
$ ./your_script.sh 

答案 1 :(得分:4)

您无法在不运行某事的情况下将某些内容设置为可执行文件;而且既然一旦足够,你可以手动完成它。 (这就是我们所有人都在使用任何未自动生成的文件。)

您可以通过两种方式执行Python程序(对于任何其他解释语言也是如此):

1)明确运行解释器:python program1.py arg1,它将找到默认的Python解释器(通常为/usr/bin/python)并告诉它运行脚本

2)使用" hashbang"前缀脚本。魔术评论,并使脚本可执行:如果您放入第一行#!/usr/bin/python并执行chmod a+x program1.py(为每个人执行program1.py可执行文件),则每次键入./program.py arg1 ,就像你跑/usr/bin/python program1.py args1一样。正如我之前所说,你只需要进行chmod一次。

您可以在shell脚本和Makefile中同时使用这两种样式;不需要单独的sh文件。

另外,你被指示的Makefile毫无意义,因为它什么也没做。可能是你的教授打算用他自己的替换它,或者可能还有其他一些解释,但all: /bin/true本身没有任何意义。

如果你真的想要一个将所有参数传递给python脚本的shell脚本,那么它就是:

#!/bin/sh

python program1.py "$@"