Bash没有识别python命令

时间:2013-04-09 17:27:31

标签: python bash

我将此命令作为bash脚本的一部分

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

但是当我运行它时,我明白了:

-bash: -c: command not found

好像bash错过了阅读python,并且认为-c是命令的名称。使用反引号时恰好相同。

如何让bash识别python

2 个答案:

答案 0 :(得分:6)

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

例如

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

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

答案 1 :(得分:3)

我认为您需要以下内容:

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

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

您的版本存在的问题是sys.argv[0]是命令中的-curllib.unquote('-c')只会返回'-c'

来自documentation on sys.argv

  

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

将其与man page(强调我的)中的信息相结合:

  

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

因此,当您使用-c时,sys.argv[0]将为'-c',提供给-c的参数是脚本,因此它不会包含在sys.argv中从索引1开始,sys.argv添加任何其他参数。