我有这样的命令,bash脚本的一部分击不承认蟒蛇命令
$(python -c "import urllib, sys; print urllib.unquote(sys.argv[0])", "h%23g")
但是当我运行它,我得到这个:
-bash: -c: command not found
仿佛庆典已经错过阅读python
,并且正在考虑-c
是该命令的名称。使用反引号时完全相同。
如何让bash识别python
?
我有这样的命令,bash脚本的一部分击不承认蟒蛇命令
$(python -c "import urllib, sys; print urllib.unquote(sys.argv[0])", "h%23g")
但是当我运行它,我得到这个:
-bash: -c: command not found
仿佛庆典已经错过阅读python
,并且正在考虑-c
是该命令的名称。使用反引号时完全相同。
如何让bash识别python
?
我想你想要像下面这样:
$(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'
。
如果用的是
-c
命令行选项来解释执行的命令,argv[0]
被设置为字符串'-c'
。
相结合,与从man page(重点煤矿)信息:
-c命令
指定要执行的命令(见下节)。这会终止选项列表(以下选项作为参数传递给命令)。
所以,当你使用-c
,sys.argv[0]
将是'-c'
,提供给-c
的说法是脚本,所以它不会被包含在sys.argv
,以及任何额外的参数添加到sys.argv
开始索引1
Python命令从$(...)结构返回字符串“-c”,然后bash尝试执行。
例如
python -c "import urllib, sys; print urllib.unquote(sys.argv[0])"
打印 “-c”,所以你基本上是问的bash解释$( - C),其错误是有效的。
把它放在反引号内? (只是一个猜测即时通讯Windows的atm) – 2013-04-09 17:29:53
@Joran试过,结果完全一样。 – ACarter 2013-04-09 17:30:16
什么是python别名?看起来它可能是一个空字符串......或者可能是'echo'。如果你写'$(\ python ...)'会发生什么?你真的想执行Python脚本的输出吗? – 2013-04-09 17:32:13