I „m pe un kali linux pe 64 de biți.
Am creat un script python care necesită 2 argumente pentru a începe. Nu vreau să scriu exact de fiecare dată aceleași căi sau să caut în istoricul comenzilor pe care le-am folosit în terminal. Așa că am decis să creez un script simplu care numește scriptul python cu argumentele sale.
#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/
Este exact aceeași comandă pe care aș folosi-o în terminal. Cu toate acestea, primesc un mesaj de eroare când încerc să execut fișierul script.
bash: ./wtf.sh: /bin: bad interpreter: Permission denied
wtf.sh are drepturi executabile.
Ce este în neregulă?
Răspuns
Aici aveți un spațiu în loc de o bară înainte:
#! /bin bash
Ar trebui să fie:
#! /bin/bash
sau pur și simplu
#!/bin/bash
(primul spațiu este opțional). Shebang (#!
) ar trebui să fie urmat de calea către un executabil , care poate fi urmat de un argument , de exemplu,
#!/usr/bin/env sh
În acest caz /usr/bin/env
este executabil; consultați man env
pentru detalii.
Doar /bin
se referă la un director.
Comentarii
Răspuns
Este demn de remarcat faptul că, dacă punctul de montare pe care se află scriptul dvs. are atributul „noexec”, atunci puteți să aruncați tot ce doriți și tot nu va funcționa, dar invocând interpretul cu scriptul ca argument va (atâta timp cât care la rândul său nu încearcă să ruleze un alt script pe o montare noexec).
#!/bin/sh
din#!/bin/bash
), cu excepția cazului în care știți că utilizați funcțiibash
.sh
doar când știu că ' Nu nu folosesc funcții bash).which bash
este util. Aceasta returnează/bin/bash
. În partea de sus a scriptului meu Bash adaug#!/bin/bash
. Apoi, când vreau să rulez scriptul Bash, introducbash foo.sh
. Deci,which sh
este utilizat în același mod.sh foo.sh
/bin/sh
este altceva decât Bash și există bashisme neobservate în script). Vedeți aici.