sudo: nicht ausführbar ./script.sh: keine solche Datei oder Verzeichnis

27

Ich bin ratlos. Ich habe ein Skript in meinem /homeVerzeichnis, das ausführbar ist:

[user@server ~]$ ll
total 4
-rwx------ 1 user user 2608 Jul 15 18:23 qa.sh

Wenn ich jedoch versuche, es damit auszuführen, kann sudoes es nicht finden:

[user@server ~]$ sudo ./qa.sh 
[sudo] password for user: 
sudo: unable to execute ./qa.sh: No such file or directory

Dies ist ein neuer Build. Es wurden keine Änderungen vorgenommen, die Probleme verursachen würden. Tatsächlich besteht der Zweck des Skripts darin, sicherzustellen, dass es tatsächlich gemäß unseren Richtlinien erstellt wird. Vielleicht ist es das nicht und sudowird tatsächlich während des Builds kaputt gemacht?

Ich sollte auch beachten, dass ich sudomit anderen Befehlen in anderen Verzeichnissen ausführen kann .

EDIT: Das Drehbuch (Ich habe es nicht geschrieben, also überlege es /bin/bashmir nicht , bitte;))

#! /bin/bash

. /root/.bash_profile

customer=$1

if [ -z "$customer" ]; then

        echo "Customer not provided. Exiting..."
        exit 1

fi

space ()
{
echo
echo '###########################################################################'
echo '###########################################################################'
echo '###########################################################################'
echo
}

g=/bin/egrep

$g ^Listen /etc/ssh/sshd_config
$g ^PermitR /etc/ssh/sshd_config
$g ^LogL /etc/ssh/sshd_config
$g ^PubkeyA /etc/ssh/sshd_config
$g ^HostbasedA /etc/ssh/sshd_config
$g ^IgnoreR /etc/ssh/sshd_config
$g ^PermitE /etc/ssh/sshd_config
$g ^ClientA /etc/ssh/sshd_config

space

$g 'snyder|rsch|bream|shud|mweb|dam|kng|cdu|dpr|aro|pvya' /etc/passwd ; echo ; echo ; $g 'snyder|rsch|bream|shud|mweb|dam|kng|cdu|dpr|aro|pvya' /etc/shadow

space

$g 'dsu|scan' /etc/passwd ; echo ; echo ; $g 'dsu|scan' /etc/shadow

space

$g ${customer}admin /etc/passwd

space

chage -l ${customer}admin

space

$g 'urs|cust|dsu' /etc/sudoers

space

$g dsu /etc/security/access.conf

space

$g account /etc/pam.d/login

space

/sbin/ifconfig -a | $g addr | $g -v inet6

space

echo "10.153.156.0|10.153.174.160|10.120.80.0|10.152.80.0|10.153.193.0|172.18.1.0|10.153.173.0"
echo
$g '10.153.156.0|10.153.174.160|10.120.80.0|10.152.80.0|10.153.193.0|172.18.1.0|10.153.173.0' /etc/sysconfig/network-scripts/route-eth1

space

cat /etc/sysconfig/network-scripts/route-eth2

space

netstat -rn | tail -1

space

cat /etc/sysconfig/iptables

space

cat /etc/hosts

space

##file /usr/local/groundwork ; echo ; echo ; /sbin/service gdma status

##space

cat /etc/resolv.conf

space

HOSTNAME=`echo $HOSTNAME | awk -F. '{ print $1 }'`

nslookup ${HOSTNAME}

echo
echo

nslookup ${HOSTNAME}-mgt

echo
echo

nslookup ${HOSTNAME}-bkp

space

/sbin/service rhnsd status ; echo ; echo ; /sbin/chkconfig --list rhnsd ; echo ; echo ; yum update --security

space

/sbin/service osad status ; echo ; echo ; /sbin/chkconfig --list osad

space

/sbin/service sshd status ; echo ; echo ; /sbin/chkconfig --list sshd

space

/sbin/service snmpd status ; echo ; echo ; /sbin/chkconfig --list snmpd ; echo ; echo ; echo ; cat /etc/snmp/snmpd.conf

space

df -h

space

cat /proc/cpuinfo | $g ^processor

space

free -g

space

if [ -f /etc/rsyslog.conf ]; then

        tail -3 /etc/rsyslog.conf

else

        echo "This system is not running rsyslog."

fi

rm -f $0
theillien
quelle
3
versuchen Sie, sh qa.shanstelle von./qa.sh
Networker
@Networker Keine Verhaltensänderung bei Verwendung dieses Formats.
Theillien

Antworten:

28

Dies geschieht normalerweise, wenn die #!Zeile shebang ( ) in Ihrem Skript unterbrochen ist.

Der Shebang teilt dem Kernel mit, dass die Datei mithilfe eines Interpreters ausgeführt werden muss. Wenn sudodie Meldung ohne ausgeführt wird , ist sie etwas aussagekräftiger. Aber mit sudoIhnen bekommen Sie die Nachricht, die Sie haben.

Beispielsweise:

$ cat test.sh
#!/bin/foo
echo bar

$ ./test.sh
bash: ./test.sh: /bin/foo: bad interpreter: No such file or directory

$ bash test.sh
bar

$ sudo ./test.sh
sudo: unable to execute ./test.sh: No such file or directory

$ sudo bash ./test.sh
bar

Die bad interpreterNachricht zeigt deutlich, dass der Schebang fehlerhaft ist.

Patrick
quelle
11
Das war das Problem. Es gab versteckte ^MZeichen und der Dolmetscher las es als Teil der Shebang-Linie. Ich habe es durchgearbeitet dos2unixund es richtig gemacht. Vielen Dank ~
Theillien
1
Welchen Editor verwenden Sie?
Strg-Alt-Delor
5
In meinem Fall wurde das Zeilenende falsch eingestellt, CR-LF für Windows sollte LF für Linux sein. Es kann eine Weile dauern, bis Sie es herausfinden.
RolfBly
11

Ich hatte gerade genau dieses Problem, es stellte sich heraus, dass es sich um ein Textdatei-Codierungsproblem handelte. Damit ich das Problem beheben konnte, während Xubuntu 14.04.3 LTS ausgeführt wurde, installierte ich dos2unix und konvertierte die Kodierung des Skripts. Anschließend führte ich das Skript erneut mit sudo aus und es funktionierte einwandfrei. Unten finden Sie ein Beispiel:

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh && sudo ./test.sh
Tom B
quelle
Beachten Sie dabei, dass die Interpretation der Zeilenendezeichen durch den Shebang in der Datei bestimmt wird. Dies kann also das Problem beheben, aber auch den Shebang ändern.
ErikE
Ich hatte dieses Problem mit dem Atom-Editor unter Windows. Das Standardzeilenende war CRLF. Wenn Sie jedoch zu "Einstellungen"> "Pakete"> "Zeilenende-Auswahl" wechseln, können Sie die Standard-Zeilenende in "LF" ändern. Wenn Sie dann WinSCP das Bash-Skript auf Linux ausführen, sollte es ohne diesen irreführenden No such file or directoryFehler ausgeführt werden.
Snark