sudo: невозможно выполнить ./script.sh: нет такого файла или каталога

27

Я в тупике. У меня есть скрипт в моем /homeкаталоге, который является исполняемым:

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

Однако, когда я пытаюсь запустить его с sudoэтим, он говорит, что не может найти его:

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

Это свежая сборка. Не было внесено никаких изменений, которые могли бы вызвать проблемы. Фактически, цель сценария - убедиться, что он действительно построен в соответствии с нашими правилами. Возможно, возможно, это не так и sudoна самом деле ломается во время сборки?

Следует также отметить, что я могу работать sudoс другими командами в других каталогах.

РЕДАКТИРОВАТЬ: сценарий (я не написал его, поэтому не /bin/bashпереусердствуйте, пожалуйста;))

#! /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
источник
3
попробуй использовать sh qa.shвместо./qa.sh
Networker
@Networker Никаких изменений в поведении при использовании этого формата.
theillien

Ответы:

28

Обычно это происходит, когда #!строка shebang ( ) в вашем скрипте не работает.

Шебанг - это то, что сообщает ядру, что файл должен быть выполнен с использованием интерпретатора. При запуске без sudo, сообщение немного более значимым. Но с sudoвами получите сообщение, которое вы получили.

Например:

$ 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

bad interpreterСообщение ясно указывает на то, что это притон , который неисправен.

Патрик
источник
11
Это была проблема. Были скрытые ^Mсимволы, и переводчик читал их как часть линии Шебанга. Я проверил это, dos2unixи это исправило это прямо. Спасибо ~
theillien
1
Какой редактор вы используете?
ctrl-alt-delor
5
В моем случае конец строки был задан неправильно, CR-LF для Windows должен быть LF для Linux. Может пройти некоторое время, прежде чем вы это узнаете.
RolfBly
11

У меня была именно эта проблема, оказалось, что это проблема кодирования текстового файла. Чтобы исправить это во время работы Xubuntu 14.04.3 LTS, я установил dos2unix и преобразовал кодировку скрипта, а затем снова запустил скрипт, используя sudo, и он работал нормально. Вы можете найти пример ниже:

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh && sudo ./test.sh
Том Б
источник
Хотя это работает, помните, что интерпретация символов окончания строки определяется шабашем на файле. Таким образом, это может решить проблему, но может измениться и Шебанг.
ErikE
У меня была эта проблема с редактором Atom в Windows. Конец строки по умолчанию был CRLF. Но если вы перейдете в «Настройки»> «Пакеты»> «Выбор конца строки», вы можете изменить конец строки по умолчанию на LF. Затем, когда вы запускаете сценарий bash для Linux, он должен выполняться без этой вводящей в заблуждение No such file or directoryошибки.
snark