- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解 perl
如何处理 shebang 行。
我曾经认为命令行“命令位置”中提到的任何解释器都会优先于 shebang 行中提到的解释器。例如,如果一个名为 demo
的可执行脚本看起来像这样
#!/usr/local/bin/perl-5.00503
printf "$]\n";
...然后我会观察以下内容:
$ ./demo
5.00503
% /usr/local/bin/perl-5.22 ./demo
5.022003
IOW,在第一次执行中,shebang 中的解释器是正在运行的解释器,而在第二次执行中,它是命令行中提到的解释器。到目前为止一切顺利。
但是现在,如果我将 shebang 上的“解释器”更改为 /usr/bin/wc
之类的东西,那么它总是胜过任何 perl
我在命令行中提到的解释器:
% cat demo-wc
#!/usr/bin/wc
printf "$]\n";
% ./demo-wc # produces the expected behavior
4 3 31 ./demo-wc
% /usr/local/bin/perl-5.22 ./demo-wc
4 3 31 ./demo-wc
% /usr/local/bin/perl-5.14 ./demo-wc
4 3 31 ./demo-wc
AFAICT,这种特殊行为似乎受限于 perl
解释器;非 perl
解释器,例如 /bin/bash
,会“否决”shebang:
% /bin/bash ./demo-wc
$]
底线是 perl
似乎有完全不同的政策来处理 shebang,这取决于所提到的解释器。
perl
如何确定要遵循的策略?最佳答案
您的测试中有几种不同的情况。
当您使用 ./demo...
时,内核会在魔数(Magic Number)(前 16 位)中找到 #!
并运行该程序,或者通过该行如果失败则发送到 shell,它会启动它上面的内容。
但是当你在命令行调用 perl 时,perl 二进制文件由 shell 启动,然后 perl 解释器自己处理 shebang。在这种情况下,它会丢弃 perl 部分,但会考虑开关——如果该行包含“perl”。
如果shebang 不调用perl,我们就有了Perl 特有的行为。来自 perlrun
If the
#!
line does not contain the word "perl" nor the word "indir", the program named after the#!
is executed instead of the Perl interpreter. This is slightly bizarre, but it helps people on machines that don't do#!
, because they can tell a program that their SHELL is /usr/bin/perl, and Perl will then dispatch the program to the correct interpreter for them.
关于shebang - Perl 如何处理 shebang 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45949339/
我试图了解 perl 如何处理 shebang 行。 我曾经认为命令行“命令位置”中提到的任何解释器都会优先于 shebang 行中提到的解释器。例如,如果一个名为 demo 的可执行脚本看起来像这样
我无法获取 Gforth当我有 shebang 时运行在脚本的顶部,例如: #!/usr/bin/gforth : pinoke ." I'm a real boy!!! " pinoke Unix
考虑以下代码: #!/usr/bin/env python import sys print "Hello! I've got %r as input." % sys.stdin.read() 这是
我正在尝试在 CentOS 6 中运行 bash 脚本。如果没有 shebang header ,它就无法工作。但是,当我包含 shebang 时,它会显示一条错误消息! 这是一个名为 test.sh
我得到了一个正则表达式,它使用这个正则表达式代码删除了 bash 中的注释 '/^\#/d' 但它也删除了 #!这不应该是因为它不是评论标签而是 shebang 那么忽略#! 怎么办呢?在正则表达式中
我打算在 php 脚本中添加一个 shebang 行 #!/bin/env php 但我环顾四周,似乎人们并没有这样做。 http://github.com/zurb/foundation/blob/
是Shebang #! ,例如 #!/bin/sh 在 Linux 标准库或任何 The Open Group 标准或其他地方正式标准化的脚本可执行文件之前?如果是,请提供引用资料和详细信息。 注意:
与使用 set 在 shebang 行上传递给脚本的标志有关的行为是否存在差异?内置? 例如: #!/bin/bash -e # do stuff 对比 #!/bin/bash set -e # do
这个问题已经有答案了: Why do people write "#!/usr/bin/env python" on the first line of a Python script? (22 个回
$ cat hello.ml #!/usr/bin/env ocamlrun ocaml let rec main = print_string "Hello World!\n" $ ./hello.
我的电脑上有/bin/bash (3.2) 和/usr/local/bin/bash (4.0)。在 $PATH 环境变量中,bash 4.0 早于 bash 3.2。 在我的 bash 脚本 she
是否可以向文件添加 shebang 行,以便它引用远程计算机上的程序? 例如,我没有在我的本地机器上安装 wolframscript,但我在远程机器上安装了。所以不是 #!/usr/bin/env w
我有一个简单的 cli 将时间戳转换为人类可读的日期时间。出于某种原因,当我尝试调用它时,我改为从 imagemagick 调用 import 命令。 > ts 1400029200000 Versi
要使 Python 脚本在 Linux 和 bash 上可执行,可以使用 shebang #! /usr/bin/env python 作为脚本的第一行。如果这一行恰好以 Windows 风格的换行符
我不太擅长 bash,我尝试编写一个脚本来使用 openSSH 连接到我的所有交换机,以便进行一些配置。 我创建了一个包含所有 25 个交换机的数组,然后使用循环打开与每个交换机的 SSH 连接。 由
我在 django 生产环境中使用 PythonAnyhwere。我有一个应该按计划运行的脚本。 由于我在 virtualenv 中安装了 django,因此脚本开始如下 #!/usr/bin/env
我在 Solaris 环境中运行 Python 脚本时遇到以下问题。 看来我在 shebang 行上做了一些不正确的事情,但我无法判断这是 Python 3 问题还是命令行问题。 但我怀疑它与 she
要使 Python 脚本在 Linux 和 bash 上可执行,可以使用 shebang #! /usr/bin/env python 作为脚本的第一行。如果这一行恰好以 Windows 风格的换行符
我在一台 linux 机器上执行了下面的代码,它执行得很好,但是当我在另一台 linux 机器上执行时,它给出了如下错误 Error:( declaration is not correct --
我目前正在编写一个 awk 脚本,如下所示: #!/usr/bin/awk -f BEGIN { print "Starting extracting data" } { print
我是一名优秀的程序员,十分优秀!