【发布时间】:2016-07-10 10:23:58
【问题描述】:
目前我只能从包含目录运行脚本,因为 shebang 行包含相对于当前目录的路径
#!/usr/bin/env xcrun swift -F ./Rome/ -framework Swiftline
如何将"."修改为绝对路径?
./Rome/ 到任何目录都可以使用的东西?我尝试了以下方法:
$0/Rome/ 不起作用
dirname $0 /Rome/ 不起作用
$1/Rome/ 不起作用
【问题讨论】:
目前我只能从包含目录运行脚本,因为 shebang 行包含相对于当前目录的路径
#!/usr/bin/env xcrun swift -F ./Rome/ -framework Swiftline
如何将"."修改为绝对路径?
./Rome/ 到任何目录都可以使用的东西?我尝试了以下方法:
$0/Rome/ 不起作用
dirname $0 /Rome/ 不起作用
$1/Rome/ 不起作用
【问题讨论】:
#!/usr/bin/env xcrun swift -F ./Rome/ -framework Swiftline 无法工作,因为 shebang 线路的工作方式。 shebang 行上第一个空格之后的所有内容都被视为一个参数。在这种情况下,env 将作为第一个参数传递“xcrun swift -F ./Rome/ -framework Swiftline”,并将包含此 shebang 的文件名作为第二个参数传递,这将不起作用,因为 xcrun swift -F ./Rome/ -framework Swiftline 不是文件。
您可以通过制作一个仅打印其参数的假解释器轻松看到这一点,例如 /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 不适用于您的情况。
【讨论】:
run.sh,它只会启动xcrun swift -F etc.,shebang 的功能不够强大,供您使用
当 PyCharm 在项目文件夹中创建一个虚拟环境 venv 时,我遇到了这样的问题,完整路径中有空格。对于这种情况,有一个简单的解决方法 - 我将项目移动到无空间位置并在那里重新创建 venv。现在,shebang 路径中的所有文件都包含指向新位置的绝对路径,并且一切正常。
为了完成解决方法,我创建了一个指向项目文件夹原始位置的符号链接。现在我有一个可操作的pip,等等。
不是最好的解决方案,但我可以按照我需要的方式在原来的地方工作,将辅助垃圾放在一个地方:-)。当然,这也是纯粹的 Pythonic 问题和解决方法。
【讨论】: