首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用scl命令作为脚本shebang?

如何使用scl命令作为脚本shebang?
EN

Stack Overflow用户
提问于 2019-10-02 19:26:08
回答 3查看 4.3K关注 0票数 1

如果我想在软件集合下运行一个特定的命令(带有参数),我可以使用以下命令:

代码语言:javascript
复制
scl enable python27 "ls /tmp"

但是,如果我试图创建一个与其shebang行具有类似命令的shell脚本,则会得到以下错误:

代码语言:javascript
复制
$ cat myscript
#!/usr/bin/scl enable python27 "ls /tmp"
echo hello

$ ./myscript
Unable to open /etc/scl/prefixes/"ls!

我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-04 23:14:43

在she bang命令中对参数的解析并没有真正定义。来自man execve

解释器脚本的可选arg参数的语义因实现而异。在Linux上,解释器名称后面的整个字符串作为一个参数传递给解释器,这个字符串可以包含空格。然而,在其他一些系统上,行为是不同的。有些系统使用第一个空白来终止可选的-arg。在某些系统中,解释器脚本可以有多个参数,可选-arg中的空格用于分隔参数。

无论如何,不支持基于引号的论点分裂。所以当你写:

代码语言:javascript
复制
#!/usr/bin/scl enable python27 "ls /tmp"

很有可能被调用的是(使用bash符号):

代码语言:javascript
复制
'/usr/bin/scl' 'enable' 'python27' '"ls' '/tmp"'

这可能就是它试图在"ls上打开/etc/scl/prefixes/"ls文件的原因。

但同样有可能的是,她的评价结果是:

代码语言:javascript
复制
'/usr/bin/scl' 'enable python27 "ls /tmp"'

这将失败,因为它将无法找到用于scl的名为enable python27 "ls /tmp"的命令来执行。

有几个解决办法你可以用。

您可以通过scl调用您的脚本:

代码语言:javascript
复制
$ cat myscript
#!/bin/bash
echo hello

$ scl enable python27 ./myscript
hello

您也可以使用特雷多表示法,但它可能会导致微妙的问题。我个人避免这样做:

代码语言:javascript
复制
$ cat ./myscript
#!/bin/bash
scl enable python27 -- <<EOF
echo hi
echo \$X_SCLS
EOF

$ bash -x myscript 
+ scl enable python27 --
hi
python27

您已经看到了其中一个问题:我必须编写\$X_SCLS来访问环境变量,而不仅仅是$X_SCL

编辑:另一个选项是两个有两个脚本。一个有实际代码,第二个简单地执行scl enable python27 $FIRST_SCRIPT。然后,您将不必记住手动输入scl ...

票数 1
EN

Stack Overflow用户

发布于 2020-04-23 19:16:51

您应该尝试使用--,而不是在命令周围加上引号。

scl enable python27 -- ls /tmp

我能够制作一个python脚本,它使用这个shebang使用rh-python 35集合:

代码语言:javascript
复制
#!/usr/bin/scl enable rh-python35 -- python

import sys
print(sys.version)
票数 3
EN

Stack Overflow用户

发布于 2022-11-22 13:14:04

软件集合文档也可能有帮助。特别是你可以试试

代码语言:javascript
复制
cat myscript.sh | scl enable python27 -

以及永久启用,一个软件集合

代码语言:javascript
复制
source scl_source enable python27
./myscript.sh
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58208150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档