目前我只能从包含目录运行一个脚本,因为shebang行包含一个相对于当前目录的路径
from operator import itemgetter
l = ['a', 'b', 'c', 'd', 'e']
l_ids = [1, 2, 3]
list(itemgetter(*l_ids)(l))
如何将#!/usr/bin/env xcrun swift -F ./Rome/ -framework Swiftline
修改为绝对路径?
"."
可以在任何目录中使用吗?我尝试了以下内容:
./Rome/
不起作用
$0/Rome/
/罗马/不起作用
dirname $0
不起作用
答案 0 :(得分:1)
#!/usr/bin/env xcrun swift -F ./Rome/ -framework Swiftline
无效。在shebang线上第一个空格之后的所有东西都被视为一个参数。在这种情况下,env将作为第一个参数传递“xcrun swift -F ./Rome/-framework Swiftline”,并将包含此shebang的文件名作为第二个参数传递,由于xcrun swift -F ./Rome/ -framework Swiftline
不是文件,因此无效。< / p>
您可以通过制作一个只打印其参数的假解释器轻松地看到这一点,例如/tmp/run.sh
包含:
#!/bin/sh
printf "%s\n" "$@"
然后在脚本/tmp/foo.sh
中使用此解释器:
#!/tmp/run.sh -a -b -c
exit
运行foo.sh时,您将看到传递给解释器的参数:
-a -b -c
./foo.sh
除了文件之外,您还必须提供运行xcrun
内容的普通shell脚本。 shebang不适合你的情况。
答案 1 :(得分:0)
当PyCharm在项目文件夹中创建虚拟环境venv
并在完整路径中带有空格时,我遇到了这样的问题。对于这种情况,有一个简单的解决方法-我将项目移至无空间的位置,然后在此处重新创建venv
。现在,shebang路径中的所有文件都包含指向新位置的绝对路径,并且一切正常。
为完成解决方法,我创建了一个符号链接,该符号链接返回到项目文件夹的原始位置。现在我在那里有一个可操作的pip
,等等。
这不是最好的解决方案,但是我可以按照需要的方式在原始位置工作,将辅助废话放在一个位置:-)。当然,这也是纯Pythonic问题和解决方法。