我有 kotlin 脚本(但它可以是任何带参数的 Linux 命令)例如:
#!/usr/bin/env kotlinc -script
println("hello world")
当我在 Ubuntu 中运行它时,我得到:
/usr/bin/env: ‘kotlinc -script’: No such file or directory
但是当我在命令行中运行时:
/usr/bin/env kotlinc -script
它有效。查找路径没有问题,因为脚本:
#!/usr/bin/env kotlinc
println("hello world")
作品
出于某种原因,在 Ubuntu 下 "#!/usr/bin/env kotlinc -script"
将 "kotlinc -script"
视为单个参数。但仅在 shell 脚本头中。
我需要明确地运行我的脚本 "#!/usr/bin/env kotlinc -script"
因为我希望它在 "kotlin"
在 $PATH
中。
Ubuntu coreutils 中是否存在错误或某事?有办法解决吗?
最佳答案
在 Linux 上,您不能通过 shebang 行传递多个参数。所有参数都将作为单个字符串传递给可执行文件:
#!/bin/foo -a -b -c
将传递一个选项“-a -b -c”到/bin/foo
,加上文件的内容。就像你打电话一样:
/bin/foo '-a -b -c' contents-of-file.txt
如今大多数 unix 衍生产品的行为应该是相同的,但它可能有所不同,我还没有对它们进行全部测试:)
很难为此找到合适的文档,我能很快找到的最好的文档是:https://www.in-ulm.de/~mascheck/various/shebang/#splitting
作为解决方法,您通常会创建一个 shell 包装器:
#!/bin/bash
exec kotlin --arg1 --arg2 ... /path/to/kotlin-script
关于linux - linux 下的 shebang 不拆分参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843510/