标签: shebang

我可以使用可变内容作为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
查看次数

Bash 脚本权限被拒绝和错误的解释器

我在kali linux 64位上。

我创建了一个 python 脚本,它需要 2 个参数来启动。我不想每次都输入完全相同的路径或搜索我在终端中使用的命令的历史记录。所以我决定创建一个简单的脚本,用它的参数调用 python 脚本。

#! /bin bash

python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/
Run Code Online (Sandbox Code Playgroud)

这与我在终端中使用的命令完全相同。但是,当我尝试执行脚本文件时收到错误消息。

bash: ./wtf.sh: /bin: bad interpreter: Permission denied
Run Code Online (Sandbox Code Playgroud)

wtf.sh 具有可执行权限。

怎么了?

executable shell-script shebang kali-linux

9
推荐指数
2
解决办法
3万
查看次数

脚本中的 shebang "#!/bin/bash -o pipelinefail" 出现无效选项名称错误

我有一个名为 test.sh 的文件:

#!/bin/bash -o pipefail
echo "Running test"
git diff HEAD^ HEAD -M --summary |
grep delete | 
cut --delimiter=' ' -f 5
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此脚本时:

./test.sh
Run Code Online (Sandbox Code Playgroud)

我得到:

/bin/bash: line 0: /bin/bash: ./test: invalid option name
Run Code Online (Sandbox Code Playgroud)

我跑去cat -v test.sh查看有没有回车什么的,但是好像没有。如果我只是将其作为 运行,我就可以运行该脚本bash test.sh。感谢您的帮助,如果我能提供更多信息,请告诉我!

shell bash shell-script shebang

9
推荐指数
1
解决办法
9372
查看次数

如何在 Linux 和 Mac OS X 之间共享 GNU sed 脚本

我有一个sed在 Linux 上使用的 GNU脚本;它安装在/bin/sed,似乎包含 GNUisms。我有使用 Mac OS X 的合作者。他们已经安装了(非 GNU)sed,位于/usr/bin/sed,并且使用 Homebrew(http://mxcl.github.io/homebrew/)可以sedgsed使用位于的coreutils包一样安装 GNU /usr/local/bin/gsed

目前,脚本以#!/bin/sed -f. 当 GNUsed安装为时,如何修改它以便它可以在 Mac OS X 上运行gsed

另一种选择是删除 GNUisms,但这可能有点困难,因为我手头没有 Mac OS X 安装并且不能要求我的合作者测试中间版本。

scripting sed portability shebang

8
推荐指数
2
解决办法
6060
查看次数

单个bash文件中的多个shebang

我有一个来自其他人的脚本,可以查看(注意:它是一个文件):

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands
Run Code Online (Sandbox Code Playgroud)

我想知道第二次和第三次shebangs的目的是什么?是误会还是故意的?

bash shell-script shebang

8
推荐指数
1
解决办法
2583
查看次数

Shebang 不会在 cron 中设置 SHELL

我有一个包含以下内容的脚本:

#!/bin/bash
printenv
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行它时:

env testscript.sh
bash testscript.sh
sh testscript.sh
Run Code Online (Sandbox Code Playgroud)

每次,它输出SHELL=/bin/bash. 但是,当它从 cron 运行时,它总是输出SHELL=/bin/sh. 为什么是这样?我怎样才能让cron应用shebang?

我已经检查了 cron PATH;它确实包括/bin。

shell bash cron shebang

8
推荐指数
1
解决办法
4549
查看次数

从 Linux 终端运行 python 脚本

我已经下载了这个名为 pyAES.py 的脚本,并将它放在我的 Linux 桌面目录中的文件夹名称代码中,

根据这个例子, http://brandon.sternefamily.net/2007/06/aes-tutorial-python-implementation/

当我打字时,

./pyAES.py -e testfile.txt -o testfile_encrypted.txt
Run Code Online (Sandbox Code Playgroud)

应该执行文件 pyAES.py。但我收到此错误,

pi@raspberrypi ~/Desktop/Codes $ pyAES.py
-bash: pyAES.py: command not found
Run Code Online (Sandbox Code Playgroud)

ls -l命令的输出是,

pi@raspberrypi ~/Desktop/Codes $ ls -l
total 16
-rw-r--r-- 1 pi pi 14536 Oct  8 10:44 pyAES.py
Run Code Online (Sandbox Code Playgroud)

这是之后的输出 chmod +x

pi@raspberrypi ~/Desktop/Codes $ chmod +x pyAES.py                              pi@raspberrypi ~/Desktop/Codes $
pi@raspberrypi ~/Desktop/Codes $ pyAES.py
-bash: pyAES.py: command not found
pi@raspberrypi ~/Desktop/Codes $
Run Code Online (Sandbox Code Playgroud)

和命令,chmod +x pyAES.py && ./pyAES.py给出以下错误,

-bash: ./pyAES.py: /usr/bin/python2: bad interpreter: No …
Run Code Online (Sandbox Code Playgroud)

path python executable shebang

7
推荐指数
1
解决办法
4万
查看次数

相当于通过输入文件的路径来执行文件(使用 shebang 行)?

假设我有一个文件hello

#!/bin/sh

echo "Hello World!"
Run Code Online (Sandbox Code Playgroud)

如果在该文件上设置了可执行位,我可以通过在提示中输入其路径来执行它:

$ ./hello
Hello World!
Run Code Online (Sandbox Code Playgroud)

是否有更明确的等价于上述内容?类似于:

$ execute hello
Run Code Online (Sandbox Code Playgroud)

我知道我可以将hello作为参数传递给/bin/sh,但我正在寻找一种解决方案,该解决方案可以自动使用 shebang 行中指定的解释器

我的用例是执行没有设置可执行标志的脚本文件。这些文件存储在 git 存储库中,因此我想避免设置它们的可执行标志或必须先将它们复制到另一个位置。

executable shell-script shebang

7
推荐指数
1
解决办法
732
查看次数

这两种 bash 环境有什么区别?

我注意到对于bash脚本,有些人使用了与我习惯放在自己顶部的不同的 shebang

有人可以简化这两者之间的区别吗?我一直用那个#!/bin/bash

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

bash executable shell-script shebang

6
推荐指数
1
解决办法
574
查看次数