Questions tagged «shebang»

如果您的问题是关于脚本开头的“#!”字符串,请使用标签/ shebang。

3
POSIX为什么未指定`#!`语法的行为?
在POSIX规范的Shell命令语言页面中: 如果shell命令文件的第一行以字符“#!”开头,则结果不确定。 为什么#!POSIX无法指定行为?我感到困惑的是,如此便携式和广泛使用的东西将具有未指定的行为。
17 shell  posix  shebang 

2
“ -v”和“ -x”参数对bash意味着什么?
我看过几个带有以下shebang的shell脚本: #!/bin/bash -x -v 但是,man bash并不能说明什么,这些论点-x和-v主张,如果他们是属于bash所有。 那么这些-x和-v(以及其他可能的论点)是什么意思?
17 bash  shebang 

3
哪个外壳解释器运行没有shebang的脚本?
假设我帐户的默认外壳是zsh,但是我打开了终端并启动了bash并执行了一个名为的脚本prac002.sh,那么该外壳解释器将用于执行zsh或bash脚本?考虑以下示例: papagolf@Sierra ~/My Files/My Programs/Learning/Shell % sudo cat /etc/passwd | grep papagolf [sudo] password for papagolf: papagolf:x:1000:1001:Rex,,,:/home/papagolf:/usr/bin/zsh # papagolf's default shell is zsh papagolf@Sierra ~/My Files/My Programs/Learning/Shell % bash # I fired up bash. (See that '%' prompt in zsh changes to '$' prompt, indicating bash.) papagolf@Sierra:~/My Files/My Programs/Learning/Shell$ ./prac002.sh …


6
脚本启动后选择解释器,例如if / else在hashbang中
有没有办法动态选择正在执行脚本的解释器?我有一个在两个不同系统上运行的脚本,并且我要使用的解释器位于两个系统上的不同位置。我最终必须要做的是每次切换时都更改hashbang行。我愿做一些事情,是合乎逻辑的该等效(我知道这个确切的结构是不可能的): if running on system A: #!/path/to/python/on/systemA elif running on system B: #!/path/on/systemB #Rest of script goes here 甚至更好的是,它尝试使用第一个解释器,如果找不到,则使用第二个: try: #!/path/to/python/on/systemA except: #!path/on/systemB #Rest of script goes here 很显然,我可以代替执行它 /path/to/python/on/systemA myscript.py 还是 /path/on/systemB myscript.py 取决于我在哪里,但我其实有一个包装脚本启动myscript.py,所以我想以指定Python解释器编程而不是手工的路径。

6
如果Bourne shell在发行版中不可用,则在hashbang中使用/ bin / sh是否正确?
通常,shell脚本在脚本文件的第一行包含以下注释:#!/bin/sh。根据我所做的研究,这称为“哈希爆炸”,这是常规注释。该注释通知Unix该文件由Bourne Shell在目录下执行/bin。 我的问题从这一点开始。到目前为止,我还没有看到这样的评论#!/bin/bash。一直如此#!/bin/sh。但是,Ubuntu发行版没有Bourne Shell程序。他们有Bourne Again Shell(bash)。 在这一点上,将注释#!/bin/sh放在用Ubuntu发行版编写的Shell脚本中是否正确?

2
以双连字符(-)开头的shebang如何工作?
我在RosettaCode页中发现了以下类型的shebang: --() { :; }; exec db2 -txf "$0" 它适用于Db2,适用于Postgres。但是,我不了解整条线。 我知道双破折号是SQL中的注释,此后它使用一些参数将文件本身作为文件传递给Db2可执行文件。但是圆括号,卷曲的小节,冒号和分号又如何替换真正的shebang#呢?? https://rosettacode.org/wiki/Multiline_shebang#PostgreSQL

3
为什么“ ps ax”找不到没有“#!”的正在运行的bash脚本 标头?
当我运行此脚本时,该脚本将一直运行直到被杀死... # foo.sh while true; do sleep 1; done ...我无法使用来找到它ps ax: >./foo.sh // In a separate shell: >ps ax | grep foo.sh 21110 pts/3 S+ 0:00 grep --color=auto foo.sh ...但是如果我只是将通用的“ #!”标头添加到脚本中... #! /usr/bin/bash # foo.sh while true; do sleep 1; done ...然后该脚本可通过同一ps命令找到... >./foo.sh // In a separate shell: >ps ax …

6
shebang(脚本声明)行过多-有什么方法可以减少行数?
我有一个包含约20个小.sh文件的项目。我将这些名称命名为“小”,因为通常没有文件包含超过20行的代码。我之所以采用模块化方法,是因为我忠于Unix理念,并且对我来说维护项目更容易。 在每个.sh文件的开头,我放置了#!/bin/bash。 简而言之,我了解脚本声明有两个目的: 它们帮助用户回忆起执行该文件所需的外壳程序(例如,几年后不使用该文件)。 他们确保脚本仅在特定外壳程序(在这种情况下为Bash)下运行,以防止在使用其他外壳程序的情况下出现意外行为。 当一个项目开始从5个文件增长到20个文件或从20个文件增长到50个文件时(不是这种情况,只是为了演示),我们有20行或50 行的脚本声明。我承认,即使对某些人来说可能很有趣,但我对使用20或50而不是每个项目只说1个(也许在项目的主文件中)感到有点多余。 有没有一种方法可以通过在某些主文件中使用一些“全局”脚本声明来避免所谓的20或50或更多行的脚本声明冗余?

3
分发脚本:我应该将/ bin / gawk或/ usr / bin / gawk用于shebang吗?
gawk通常在/ bin或/ usr / bin中吗?我愿意,#!/usr/bin/env gawk但是我不能使用参数。现在我正在使用#!/bin/gawk -f。该脚本很长,包含很多单引号,并且可以与stdin一起使用。 GNU Awk手册的第1.1.4节“可执行awk程序”在其示例中使用#!/ bin / awk,但接着说: 请注意,在许多系统上都awk可以在中找到/usr/bin而不是/bin。买者自负。 大多数人做什么?我已经读过sed应该在/ bin中标准化,而perl应该在/ usr / bin中标准化(与sed链接相同的页面,但是他们不会让我为此帖子做第三个链接)。那awk / gawk呢?有谁知道哪个更普遍或更受欢迎?
12 awk  shebang  env 

1
没有这样的文件或目录,但我可以看到它!
我正在尝试使用winSCP在无头的Raspberry PI上运行python脚本,并得到以下错误消息: Command '"./areadetect_movie_21.py"' failed with return code 127 and error message /usr/bin/env: python : No such file or directory. 当我尝试从终端运行时,我得到: : No such file or directory. 我尝试在相同的目录中使用相同的python shebang,相同的权限并使用相同的用户pi使用类似的python脚本,并且可以正常工作。 我也这样做了,ls并且可以看到该文件,所以我不知道为什么它将无法运行。

2
为什么#!/ usr / bin / env bash在我的系统上不起作用?
在运行一些他们抱怨的安装脚本时,我遇到了一些问题bad interpreter。 因此,我举了一个简单的例子,但我无法弄清楚问题出在哪里,请参阅下文。 #!/usr/bin/env bash echo "hello" 执行上面的脚本会导致以下错误 [root@ech-10-24-130-154 dc-user]# ./junk.sh bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory 该/usr/bin/env文件存在,请参见下文: [root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env [root@ech-10-24-130-154 dc-user]# ls -l /bin/env -rwxr-xr-x 1 root root 23832 Jul 16 …


1
shebang行无法与cr-lf一起使用
为什么以下基本脚本的shebang部分不起作用: $ cat hello.sh #! /bin/sh echo Hello $ ./hello.sh bash: ./hello.sh: /bin/sh^M: bad interpreter: No such file or directory $ cat hello.py #! /usr/bin/env python3 print("Hello") $ ./hello.py : No such file or directory 而手动调用解释器则有效: $ sh hello.sh Hello $ python3 hello.py Hello

2
一个bash文件中有多个shebang
我有一个别人看过的脚本(注意:这是一个文件): #!/bin/bash some commands some commands #!/bin/bash some commands some commands #!/bin/bash some commands some commands 我想知道第二和第三次爆炸的目的是什么?是由于错误还是故意?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.