sudo: tidak dapat menjalankan ./script.sh: tidak ada file atau direktori tersebut

27

Saya bingung. Saya memiliki skrip di /homedirektori saya yang dapat dieksekusi:

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

Namun, ketika saya mencoba untuk menjalankannya dengan sudomengatakan itu tidak dapat menemukannya:

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

Ini baru dibangun. Tidak ada perubahan yang dibuat yang akan menyebabkan masalah. Sebenarnya, inti dari skrip adalah untuk memastikan bahwa skrip tersebut benar-benar dibangun sesuai dengan kebijakan kami. Mungkin itu bukan dan sudosebenarnya sedang rusak selama pembangunan?

Saya juga harus mencatat bahwa saya dapat menjalankan sudodengan perintah lain di direktori lain.

EDIT: Script (saya tidak menulis jadi jangan /bin/bashsaya mengatasinya, tolong;))

#! /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
sumber
3
coba gunakan sh qa.shalih-alih./qa.sh
Networker
@Networker Tidak ada perubahan perilaku saat menggunakan format ini.
theillien

Jawaban:

28

Ini biasanya terjadi ketika baris shebang ( #!) di skrip Anda rusak.

Shebang adalah yang memberitahu kernel bahwa file harus dieksekusi menggunakan penerjemah. Saat dijalankan tanpanya sudo, pesannya sedikit lebih bermakna. Tetapi dengan sudoAnda mendapatkan pesan yang Anda dapatkan.

Sebagai contoh:

$ 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

The bad interpreterpesan jelas menunjukkan bahwa itu adalah peristiwa yang rusak.

Patrick
sumber
11
Ini masalahnya. Ada ^Mkarakter tersembunyi dan penerjemah membacanya sebagai bagian dari garis shebang. Saya menjalankannya dos2unixdan memperbaikinya. Terima kasih ~
theillien
1
Editor apa yang Anda gunakan?
ctrl-alt-delor
5
Dalam kasus saya, akhir baris ditetapkan salah, untuk CR-LF untuk Windows, harus LF untuk Linux. Perlu beberapa saat sebelum Anda mengetahuinya.
RolfBly
11

Saya baru saja mengalami masalah ini, ternyata menjadi masalah penyandian file teks. Bagi saya untuk memperbaikinya saat menjalankan Xubuntu 14.04.3 LTS, saya menginstal dos2unix dan mengkonversi pengkodean skrip dan kemudian menjalankan skrip lagi menggunakan sudo dan itu berfungsi dengan baik. Anda dapat menemukan contoh di bawah ini:

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh && sudo ./test.sh
Tom B
sumber
Sementara ini berhasil, sadari bahwa interpretasi karakter akhir baris dibentuk oleh shebang pada file. Jadi ini bisa memperbaiki masalah, tetapi juga bisa mengubah shebang.
ErikE
Saya punya masalah dengan editor Atom di Windows. Akhir baris default adalah CRLF. Tetapi jika Anda pergi ke Pengaturan> Paket> Pemilih Akhir Baris, Anda dapat mengubah akhiran standar menjadi LF. Kemudian ketika Anda WinSCP skrip bash ke Linux harus dijalankan tanpa No such file or directorykesalahan yang menyesatkan .
snark