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

Dav*_*log 9 executable shell-script shebang kali-linux

我在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 具有可执行权限。

怎么了?

gol*_*cks 10

您在这里有一个空格而不是正斜杠:

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

应该:

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

或者干脆

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

(第一个空格是可选的)。shebang( #!) 后面应该跟一个可执行文件的路径,后面可以跟一个参数,例如,

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

在这种情况下/usr/bin/env是可执行文件;man env详情请参阅。

只是/bin指一个目录。


小智 5

值得注意的是,如果脚本所在的挂载点具有“noexec”属性,那么您可以随心所欲地执行命令,但它仍然不起作用,但是使用脚本作为参数调用解释器将(只要反过来,它不会尝试在 noexec 挂载上运行另一个脚本)。