相关疑难解决方法(0)

/usr/bin/env 如何知道使用哪个程序?

当我使用shebang#!/usr/bin/env python运行脚本时,系统如何知道python使用哪个?如果我python在环境变量中寻找 bin 路径,我什么也找不到。

env | grep -i python
Run Code Online (Sandbox Code Playgroud)

python environment-variables

74
推荐指数
3
解决办法
5万
查看次数

有什么理由让shebang指向/bin/sh而不是/bin/bash?

在我见过的大多数 shell 脚本中(除了我自己没有写的脚本),我注意到 shebang 设置为#!/bin/sh. 这在旧脚本上并没有让我感到惊讶,但在相当新的脚本上也是如此。

是否有任何理由宁愿/bin/sh/bin/bash,因为bash几乎是无处不在的,而且往往默认情况下,许多Linux和BSD的机器回去了十多年?

shell bash history shebang

54
推荐指数
5
解决办法
6513
查看次数

如果我以“/bin/bash”或“/usr/bin/env bash”开始 bash 有什么区别?

在 shell 脚本中,在 shebang( #!) 行指定语言解释器。据我所知,建议使用,#!/usr/bin/env bash因为env它总是位于/usr/bin目录中,而位置bash可能因系统而异。但是,如果bash直接使用/bin/bash或通过env实用程序启动,是否有任何技术差异?另外,如果我没有为 指定任何变量envbash则在未修改的环境中启动,我是否正确?

bash environment-variables

33
推荐指数
2
解决办法
4万
查看次数

为什么不使用无路径shebang?

是否有可能有一个shebang,而不是指定解释器的路径,而是具有解释器的名称,并让shell通过$PATH找到它?

如果没有,有什么原因吗?

shell shebang

26
推荐指数
2
解决办法
4840
查看次数

如何在脚本的shebang行中拥有不止一种可能性?

我遇到了一个有趣的情况,我有一个 Python 脚本,理论上可以由具有各种环境(和路径)和各种 Linux 系统的各种用户运行。我希望这个脚本尽可能多地在没有人为限制的情况下执行。以下是一些已知的设置:

  • Python 2.6 是系统Python 版本,所以python、python2 和python2.6 都存在于/usr/bin 中(并且是等效的)。
  • Python 2.6 是系统 Python 版本,如上所述,但 Python 2.7 作为 python2.7 安装在它旁边。
  • Python 2.4 是系统 Python 版本,我的脚本不支持。在 /usr/bin 中,我们有 python、python2 和 python2.4,它们是等效的,以及脚本支持的 python2.5。

我想在所有这三个上运行相同的可执行 python 脚本。如果它首先尝试使用 /usr/bin/python2.7 会很好,如果它存在,然后回退到 /usr/bin/python2.6,然后回退到 /usr/bin/python2.5,然后如果这些都不存在,就会出错。不过,我并不太喜欢使用最新的 2.x 版本,只要它能够找到正确的解释器之一(如果存在)。

我的第一个倾向是将 shebang 行从:

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

#!/usr/bin/python2.[5-7]
Run Code Online (Sandbox Code Playgroud)

因为这在 bash 中工作正常。但是运行脚本会给出:

/usr/bin/python2.[5-7]: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

好的,所以我尝试以下操作,这也适用于 bash:

#!/bin/bash -c /usr/bin/python2.[5-7]
Run Code Online (Sandbox Code Playgroud)

但同样,这失败了:

/bin/bash: - : invalid option
Run Code Online (Sandbox Code Playgroud)

好的,显然我可以编写一个单独的 shell 脚本来找到正确的解释器并使用它找到的任何解释器运行 python 脚本。我只是觉得分发两个文件很麻烦,只要它在安装了最新的 python 2 解释器的情况下运行就足够了。要求人们显式调用解释器(例如,$ python2.5 …

scripting bash python

19
推荐指数
4
解决办法
9504
查看次数

如何在干净的环境中启动脚本?

我尝试了以下但它似乎不起作用:

$ cat script.sh
#!/bin/env -i /bin/sh

/bin/env
$ script.sh
/bin/env: invalid option -- ' '
Try `/bin/env --help' for more information.
Run Code Online (Sandbox Code Playgroud)

bash shell-script env

17
推荐指数
1
解决办法
5866
查看次数

shell 脚本头以获得最佳兼容性

哪一个更好:

  • #!/usr/bin/env sh
  • #!/bin/sh
  • 空/无标题

我曾经认为第一个是最好的,无论如何我发现在一些基于 Linux 的系统(如 Android)上缺少路径名,所以现在我认为拥有“可移植”shell 脚本的唯一方法是不包括任何标题...

shell-script shebang

14
推荐指数
1
解决办法
7685
查看次数

分发脚本:我应该为shebang 使用/bin/gawk 还是/usr/bin/gawk?

gawk 通常是在 /bin 还是 /usr/bin 中?我会去,#!/usr/bin/env gawk但后来我不能使用参数。现在我正在使用#!/bin/gawk -f. 脚本很长,包含很多单引号,并与标准输入一起使用。

GNU Awk 手册有部分 1.1.4 Executable awk Programs在它的示例中使用 #!/bin/awk 但接着说:

请注意,在许多系统上awk可能会发现 in/usr/bin而不是 in /bin。买者自负。

大多数人做什么?我读过sed 应该在 /bin 中标准化,而 perl 应该在 /usr/bin 中标准化(与 sed 链接相同的页面,但他们不会让我为这篇文章制作第三个链接)。awk/gawk 怎么样?有谁知道哪个更常见或更受欢迎?

awk env shebang

12
推荐指数
3
解决办法
3139
查看次数

我可以使用可变内容作为shebang吗?

我有一个 shell 脚本,我想在其中添加一个 shebang。给定一个定义如下的变量:

SHEBANG="#!/bin/sh"
Run Code Online (Sandbox Code Playgroud)

我的问题是我是否可以在另一个脚本中使用该变量,如下所示:

$SHEBANG
# other stuff...
Run Code Online (Sandbox Code Playgroud)

linux shell bash shell-script shebang

10
推荐指数
1
解决办法
1811
查看次数

POSIX shell 脚本 shebang #!/bin/sh vs #!/usr/bin/env sh,有什么区别?

我最近注意到许多脚本/usr/bin/env在他们的shebang中使用。我已经看到主要使用BashPython,但迄今为止从未与POSIX sh ( ash, dash,... )结合使用。

我想知道为什么,如果我的本意是高度可移植的POSIX shell 脚本可能会从这种env方法中受益?


关于是否使用:是否存在普遍共识:


让我足够强调这一点:

我从来没有见过这个sh

shell posix shebang

10
推荐指数
1
解决办法
2477
查看次数