Bash脚本权限被拒绝且翻译错误


8

我正在使用kali Linux 64位。

我创建了一个Python脚本,该脚本需要2个参数才能启动。我不想每次都键入完全相同的路径,也不想在终端中使用的命令的历史记录中进行搜索。因此,我决定创建一个简单的脚本,该脚本以其参数调用python脚本。

#! /bin bash

python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/

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

bash: ./wtf.sh: /bin: bad interpreter: Permission denied

wtf.sh具有可执行权限。

怎么了?

Answers:


10

您在此处有一个空格而不是正斜杠:

#! /bin bash

应该:

#! /bin/bash

或简单地

#!/bin/bash

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

#!/usr/bin/env sh

在这种情况下/usr/bin/env是可执行文件;man env有关详细信息,请参见。

只是/bin指目录。


该死的,愚蠢的我!谢谢!没看到那个……
Davlog

1
除非您知道正在使用功能,否则您可能要养成使用#!/bin/sh(而不是#!/bin/bash)的习惯bash
G-Man说'恢复莫妮卡'

@ G-Man感谢您清理一点。WRT bash vs. sh,我只是遵循问题的模式(尽管我的趋势是仅sh在知道使用bash功能时使用)。
goldilocks

在Ubuntu终端中,which bash很有帮助。那又回来了/bin/bash。在我的Bash脚本的顶部,添加#!/bin/bash。然后,当我想运行Bash脚本时,输入bash foo.sh。所以which sh是用同样的方法。sh foo.sh
noobninja

1
@ G-Man,在工作世界中,不幸的是有许多人不知道自己是否在使用Bash功能。在许多情况下,最好不要运行脚本(因为在shebang中指定了Bash但缺少/bin/sh了该脚本),而不是运行并执行意外的操作(因为Bash以外的东西,并且脚本中存在不为人知的Bashisms)。 看这里。
通配符

1

值得注意的是,如果脚本所在的挂载点具有'noexec'属性,则可以将所需的所有内容都爆炸,但仍然无法正常工作,但是使用脚本作为参数调用解释器(只要从而不会尝试在noexec挂载上运行其他脚本)。

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.