Назад | Перейти на главную страницу

Как запустить файл .sh в Red Hat?

Когда я пытался запустить свой .sh файл в Redhat, используя ./test.sh

Я получаю сообщение об ошибке

[test@tester unix_scripts]$ ./test.sh
: No such file or directory
[test@tester unix_scripts]$ 

Я также установил разрешение файла с chmod 777 test.sh

все та же ошибка

Кто-нибудь может мне помочь?

На самом деле проблема заключалась в том, что сценарий, который я использовал, был создан в dos, поэтому я преобразовал свой сценарий в unix с помощью команды dos2unix. Спасибо всем за вашу ценную помощь.

Возможно, вы забыли указать в первой строке вашего скрипта:

#!/bin/bash

например:

#!/bin/bash          
echo Hello World  

Если вы попробуете простой сценарий оболочки, как в приведенном выше примере hello world? работает или нет?

Кстати: вы уверены в контексте SELinux?
Что значит: getenforce сказать?
Что значит: ls -l test.sh сказать?

Мой лучший совет - сначала попробуйте очень простой сценарий, чтобы вы могли проверить каждую среду и поведение контекста.

Дважды проверьте, что вы находитесь в правильном каталоге (вы можете просмотреть, что находится в каталоге, набрав «ls»), а имя файла - «test.sh». Вы также можете попробовать:

[test@tester unix_scripts]$ sh test.sh

Находится ли test.sh в каталоге unix_scripts?

Есть ли в test.sh файл или каталог, который не существует? Потому что ошибка может исходить из самого скрипта, а не из-за выполнения скрипта ...

Да, должно быть #! (грохот!) :)

Можете ли вы опубликовать результаты следующих команд, выполненных в каталоге, в котором находится ваш скрипт?

ls -l
cat test.sh

Ты используешь ш или трепать? (т.е. какова первая строка вашего скрипта?)

Если вы используете #! / bin / sh, тогда вам нужно убедиться, что / bin / sh существует (введите какой ш)

Возможно, вам придется попробовать #! / bin / bash или другую оболочку, если / bin / sh не установлен.

Пытаться getenforce. Если это принудительно, то selinux включен и ваш скрипт может потребоваться для запуска в другом контексте.

Если getenforce возвращает принудительное выполнение, затем проверьте dmesg, / var / log / message /var/log/audit/audit.log или где бы то ни было, на вашем хосте selinux входит в систему, чтобы найти точную проблему.

Или просто попробуйте настроить сценарий в тот же контекст, что и другой запущенный сценарий.

Чтобы увидеть контекст файлов, используйте ls -lZ.

Или попробуйте

chcon --reference=/script/that/will/work /script/that/wont/work

Возможно, проверьте страницу руководства chcon, я не уверен на 100% в синтаксисе --reference.

Добавление хэшбэга в ваш скрипт не изменит того, что нужно для его запуска. Вам нужно либо сделать его исполняемым (chmod + x test.sh), а затем запустить (./test.sh), либо вы можете вызвать его как аргумент оболочки (sh test.sh).

Вы также можете поместить скрипт в любое место из переменной $ PATH (например, ~ / bin /, / usr / local / bin /), и, если он исполняемый, вы можете запустить его из любого места, не ссылаясь на его местоположение (test.sh) .

Если сценарий запускается без аргумента оболочки, он по умолчанию запускается в любой оболочке, которую вы используете в данный момент. Который здесь важен хэшбанг ... если вы хотите убедиться, что он запускается как сценарий bash, даже если пользователь использует tcsh, ksh или что-то еще, вы помещаете #! / bin / bash в качестве первой строки сценария .

шаг 1 - проверьте наличие shebang в первой строке файла шаг 2 - указывает ли shebang на настоящий двоичный файл? (пытаться which [path after shebang]) шаг 3 - если шаг 2 подтверждается, ./test.sh должен работать, иначе .. шаг 4 - попробуйте /full/path/to/sh test.sh


то, что вы опубликовали, Чарли, не имеет никакого смысла

вам нужно изменить разрешения:

chmod +x test.sh