2016-02-21 56 views
-3

我有一个调用像这样一个Python脚本壳...避免:靠近意外的标记语法错误在bash

shell代码:

#!/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")' 

我查找了“意外标记附近的语法错误”错误,它看起来像这是预期的。有没有更好的方法来做到这一点,有没有办法以这种方式调用函数没有Bash错误?

在此先感谢。

+3

如果你想编写Python,做到这一点,并使用Python解释器。如果你想编写一个shell脚本,使用一个shell。不要期望shell能够理解python或python来理解shell脚本。 – Mat

+4

为什么你的“shell脚本”Python的大部分文本? – user2357112

+0

你期望'5 + 4'做什么?没有赋值语句,没有'echo'语句,这对sh算术来说不是正确的语法。 Korn shell和zsh支持'print',但它不是POSIX恭维,不需要括号。你的评论说你正在使用bash,但是你在你的脚本中指定了'/ bin/sh'(它可能与bash链接,但不能作为bash)。 – cdarke

回答

2

如果你想运行一个bash脚本,然后在你的文件的顶部,而不是sh指定bash

#!/bin/bash 

若要从bash的Python脚本,那么所有你需要做的是:

python PyTest.py 

如果你想在脚本嵌入蟒那么你可以使用一个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之类的东西即可。

1

您可以使用一个:

#!/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! 
>>> 
相关问题