2013-04-09 79 views
1

我有这样的命令,bash脚本的一部分击不承认蟒蛇命令

$(python -c "import urllib, sys; print urllib.unquote(sys.argv[0])", "h%23g") 

但是当我运行它,我得到这个:

-bash: -c: command not found 

仿佛庆典已经错过阅读python ,并且正在考虑-c是该命令的名称。使用反引号时完全相同。

如何让bash识别python

+0

把它放在反引号内? (只是一个猜测即时通讯Windows的atm) – 2013-04-09 17:29:53

+0

@Joran试过,结果完全一样。 – ACarter 2013-04-09 17:30:16

+1

什么是python别名?看起来它可能是一个空字符串......或者可能是'echo'。如果你写'$(\ python ...)'会发生什么?你真的想执行Python脚本的输出吗? – 2013-04-09 17:32:13

回答

3

我想你想要像下面这样:

$(python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "h%23g") 

这将导致h#g,如果这就是你有一条线那么它也将尝试运行名为h#g命令,所以我假设你实际上将它用作更大命令的一部分。

与您的版本有关的问题是,sys.argv[0]-c,而urllib.unquote('-c')将仅返回'-c'

documentation on sys.argv

如果用的是-c命令行选项来解释执行的命令,argv[0]被设置为字符串'-c'

相结合,与从man page(重点煤矿)信息:

-c命令
指定要执行的命令(见下节)。这会终止选项列表(以下选项作为参数传递给命令)

所以,当你使用-csys.argv[0]将是'-c',提供给-c的说法是脚本,所以它不会被包含在sys.argv,以及任何额外的参数添加到sys.argv开始索引1

+0

另外,除非python脚本正在打印命令,否则这不应该在它自己的行上。否则,它会尝试将结果解释为命令。执行命令w/o命令替换(因此它只是输出)或使用命令替换将结果分配给变量。 – jpm 2013-04-09 17:45:35

+0

太棒了,这真的帮助我理解,谢谢:) – ACarter 2013-04-09 17:57:07

6

Python命令从$(...)结构返回字符串“-c”,然后bash尝试执行。

例如

python -c "import urllib, sys; print urllib.unquote(sys.argv[0])" 

打印 “-c”,所以你基本上是问的bash解释$( - C),其错误是有效的。