避免:bash中意外标记附近的语法错误

2024-04-27 12:26:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个shell,它调用一个类似于这样的python脚本。。。

外壳代码:

#!/bin/sh
python PyTest.py

print("FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM")

5 + 4

print("No semicolons here!")

Python代码:

#This is my test Python script running from bash

print("FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM")

print(5 + 4)

print("No semicolons here!")

这是输出。

74-85-81-234:Desktop Cody$ ./PyTest.sh
FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM
9
No semicolons here!
./PyTest.sh: line 5: syntax error near unexpected token `"FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM"'
./PyTest.sh: line 5: `print("FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM")'

我已经查找了“syntax error near unexpected token”错误,看起来这是预期的。有没有更好的方法可以做到这一点,并且有没有办法以这种方式调用函数而不出现Bash错误?

提前谢谢。


Tags: tonomakepytestshitfiprint
2条回答

您可以使用以下选项之一:

#!/usr/bin/env python

print("FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM")
5 + 4
print("No semicolons here!")

或者

#!/bin/sh

python <<%
print("FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM")
5 + 4
print("No semicolons here!")
%

注意,5 + 4在这两种情况下都不会产生任何输出,因为这不是交互式python会话:

FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM
No semicolons here!

使用-i选项将使其工作:

#!/bin/sh

python -i <<%
print("FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM")
5 + 4
print("No semicolons here!")
%

输出:

[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM
>>> 9
>>> No semicolons here!
>>> 

如果要运行bash脚本,请在文件顶部指定bash,而不是sh

#!/bin/bash

要从bash运行python脚本,只需执行以下操作:

python PyTest.py

如果要在脚本中嵌入python,则可以使用here文档:

python << END

print("FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM")

print(5 + 4)

print("No semicolons here!")

END

或者写在bash中:

#!/bin/bash

echo "FE FI FO FUM I'M GOING TO MAKE IT TUMBLE TUM TUM"

echo $((5 + 4))

echo "No semicolons here either!"

但为什么呢?Bash不能做任何python做不到的事情,但是python可以做的比Bash多得多。用python编写所有内容!只需在python脚本的顶部放置类似#!/usr/bin/env python的内容。

相关问题 更多 >