sudo: impossibile eseguire ./script.sh: nessun file o directory


27

Sono perplesso. Ho uno script nella mia /homedirectory che è eseguibile:

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

Tuttavia, quando provo a eseguirlo sudo, dice che non riesce a trovarlo:

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

Questo è su una nuova build. Non sono state apportate modifiche che potrebbero causare problemi. In effetti, lo scopo dello script è garantire che sia effettivamente costruito secondo le nostre politiche. Forse forse non lo è e sudoviene effettivamente rotto durante la compilazione?

Dovrei anche notare che posso eseguire sudoaltri comandi in altre directory.

EDIT: La sceneggiatura (non l'ho scritta, quindi non /bin/bashme ne occupare, per favore;))

#! /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

3
prova a usare sh qa.shinvece di./qa.sh
Networker il

@Networker Nessun cambiamento nel comportamento durante l'utilizzo di questo formato.
theillien,

Risposte:


28

Questo di solito accade quando la #!riga shebang ( ) nella tua sceneggiatura viene interrotta.

Lo shebang è ciò che dice al kernel che il file deve essere eseguito usando un interprete. Se eseguito senza sudo, il messaggio è un po 'più significativo. Ma con sudote ricevi il messaggio che hai.

Per esempio:

$ 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

Il bad interpretermessaggio indica chiaramente che è lo shebang che è difettoso.


11
Questo era il problema. C'erano ^Mpersonaggi nascosti e l'interprete lo stava leggendo come parte della linea shebang. L'ho passato dos2unixe lo ha risolto. Grazie ~
theillien,

1
Quale editor stai usando?
ctrl-alt-delor,

5
Nel mio caso, la fine della linea è stata impostata in modo errato, su CR-LF per Windows, dovrebbe essere LF per Linux. Potrebbe volerci un po 'prima di scoprirlo.
RolfBly,

11

Ho appena avuto questo esatto problema, si è rivelato essere un problema di codifica dei file di testo. Per consentirmi di risolverlo durante l'esecuzione di Xubuntu 14.04.3 LTS, ho installato dos2unix e convertito la codifica dello script, quindi ho eseguito nuovamente lo script usando sudo e ha funzionato bene. Di seguito puoi trovare un esempio:

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh && sudo ./test.sh

Mentre questo funziona, renditi conto che l'interpretazione dei caratteri di fine riga è modellata dallo shebang nel file. Quindi questo può risolvere il problema, ma anche cambiare lo shebang.
ErikE,

Ho avuto questo problema con l'editor Atom su Windows. Il finale di riga predefinito era CRLF. Ma se vai su Impostazioni> Pacchetti> Selettore di fine linea puoi cambiare la linea di default che termina in LF. Quindi quando WinSCP lo script bash su Linux dovrebbe essere eseguito senza quell'errore fuorviante No such file or directory.
Snark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.