Помогите запустить скрипт SH
При запуске скрипта установки, одна машина не хочет его выполнять.
ira@ira-HP-ProBook-4540s:~$ chmod +x ./dwagent.sh ira@ira-HP-ProBook-4540s:~$ sudo sh dwagent.sh[sudo] пароль для ira: Extracting file . dwagent.sh: 19: dwagent.sh: [[: not found dwagent.sh: 29: dwagent.sh: /tmp/dwagent_install20210910191831/extract: not found mv: не удалось выполнить stat для '/tmp/dwagent_install20210910191831/runtime/bin32': Нет такого файла или каталога mv: не удалось выполнить stat для '/tmp/dwagent_install20210910191831/runtime/lib/linux32/*': Нет такого файла или каталога mv: не удалось выполнить stat для '/tmp/dwagent_install20210910191831/runtime/lib/engines32': Нет такого файла или каталога mv: не удалось выполнить stat для '/tmp/dwagent_install20210910191831/runtime/lib/python2.7/lib-dynload32': Нет такого файла или каталога Running installer . unlink: невозможно удалить ссылку '/tmp/dwagent_install20210910191831/runtime/lib/libz.so.1.2.8': Нет такого файла или каталога dwagent.sh: 56: dwagent.sh: /tmp/dwagent_install20210910191831/runtime/bin/dwagent: not found Error starting gui, attempt to start console mode. dwagent.sh: 69: dwagent.sh: /tmp/dwagent_install20210910191831/runtime/bin/dwagent: not found Removing temp directory .
Из наутилуса, не запускается то же. Флажок на выполнение устанвлен. Системы на обеих машинах одинаковые, Ubuntu 16.04. На другой запускаеться без проблем.
zloon
10.09.21 20:13:28 MSK
Выполнение команд через shell-скрипты в Linux
Оболочка — это интерпретатор командной строки, который позволяет пользователю взаимодействовать с системой. Он отвечает за получение входных данных от пользователя и вывод данных.
Сценарии оболочки — это серия команд, записанных в порядке выполнения. Сценарии могут содержать функции, циклы, команды и переменные. Они упрощают сложные серии команд и повторяющиеся задачи.
В этом мануале мы разберем, как создавать и выполнять сценарии оболочки для командной строки в Linux.
Требования
- Умение пользоваться терминалом.
- Знание текстового редактора.
- Знание команд: chmod, mkdir и cd.
Читайте также:
- Пользовательская настройка командной строки Bash
- Создание интерактивных запросов командной строки
Начало работы
Скрипты оболочки нужно сохранять с расширением .sh.
Файл должен начинаться с шебанга (#!), чтобы система Linux понимала, какой интерпретатор использовать для сценария оболочки.
Для сред bash введите:
#!/bin/bash
Для сред shell введите:
#!/bin/sh
В этом мануале предполагается, что вы используете среду bash.
В скриптах также могут содержаться комментарии, они нужны для упрощения их читаемости. Удобный сценарий всегда содержит комментарии, которые помогают понять принцип работы скрипта и причины выбора тех или иных команд.
Создание и запуск базового shell-скрипта
Скрипт оболочки можно создать с помощью редактора vi, команды cat или текстового редактора.
Мы будем создавать с помощью vi:
vi basic_script.sh
Команда запустит редактор vi и создаст файл basic_script.sh.
Затем нажмите i на клавиатуре для запуска INSERT MODE. Добавьте следующие строки:
#!/bin/bash whoami date
Скрипт запускает команды whoami и date. Команда whoami отображает активное имя пользователя, а date — текущую системную метку времени.
Чтобы сохранить и выйти из редактора vi:
- Нажмите ESC
- Нажмите двоеточие (:)
- Введите wq
- Нажмите ENTER
Теперь можно запустить сценарий с помощью команды:
bash basic_script.sh
Получим следующий вывод:
root Fri Jun 19 16:59:48 UTC 2020
Первая строка вывода соответствует команде whoami, а вторая команде date.
Можно запустить скрипт без указания bash:
./basic_script.sh
Запуск файла таким образом может потребовать разрешение пользователя. Запуск с помощью bash не требует этого разрешения.
~bash: ./basic_script.sh: Permission denied
Команда bash filename требует только прав на чтение.
Команда ./filename запускает файл как исполняемый и требует разрешения execute.
Для выполнения сценария нужно обновить привилегии.
chmod +x basic_script.sh
Эта команда применит chmod и дает права x (исполнение) текущему пользователю.
Использование переменных в скриптах
Скрипты могут включать пользовательские переменные. По мере увеличения размера сценариев важно иметь четко определенные переменные с информативными именами.
Добавьте в скрипт следующие строки:
#!/bin/bash # This is a comment # defining a variable GREETINGS="Hello! How are you" echo $GREETINGS
GREETINGS — это переменная, определенная с помощью символа $ (знак доллара). В строке, в которой переменным присваивается значение, не должно быть пробелов.
bash basic_script.sh
На экран выведется присвоенное переменной значение:
Hello! How are you
Как видите, переменная GREETINGS успешно определена в сценарии и доступна при запуске скрипта.
Чтение ввода из командной строки
Shell-скрипты можно сделать интерактивными с возможностью принимать ввод из командной строки. Сохранить ввод командной строки в переменной можно с помощью команды read.
Добавьте в скрипт следующие строки:
#!/bin/bash # This is a comment # defining a variable echo "What is your name?" # reading input read NAME # defining a variable GREETINGS="Hello! How are you" echo $NAME $GREETINGS
Переменная NAME принимает ввод из командной строки. Этот скрипт ожидает, пока пользователь введет значение NAME. Затем он выводит NAME и GREETINGS.
What is your name? 8host 8host Hello! How are you
В примере пользователь ввел значение 8host.
Определение функций
Пользователи могут определять свои функции в сценариях. Эти функции могут принимать несколько аргументов.
Добавьте в скрипт следующие строки:
#!/bin/bash #This is a comment # defining a variable echo "What is the name of the directory you want to create?" # reading input read NAME echo "Creating $NAME . " mkcd () mkdir "$NAME" cd "$NAME" > mkcd echo "You are now in $NAME"
Этот скрипт запрашивает имя каталога. Затем он c помощью mkdir создает требуемый каталог и переходит в него.
What is the name of the directory you want to create? test_dir Creating test_dir . You are now in test_dir
В данном примере мы ввели test_dir. Далее скрипт создаст новый каталог с этим названием. Наконец, скрипт перейдет из текущего рабочего каталога пользователя в test_dir.
Заключение
В этом мануале мы разобрали, как создавать и запускать скрипты оболочки для командной строки в Linux.
Подумайте о повторяющихся или отнимающих много времени задачах, которые вы часто выполняете – возможно, такие команды полезнее заменить скриптами.
Как запустить sh скрипты в Linux?

Miroslavux, так вам что нужно? Исполнять любые sh файлы тычком мыши, неважно, исполняемые они или нет, или делать их исполняемыми?
Вместо sh может быть любая другая команда — например, ваш собственный скрипт, выполняющий с файлом нужные вам действия.
Miroslavux @Miroslavux Автор вопроса
Adamos, Исполнять любые sh файлы тычком мыши, неважно, исполняемые они или нет

Виктор Таран @shambler81 Куратор тега Linux
Запускаемость в линукс это атрибут, по этому ты можешь его установить или нет, и делается это через chmod
Второй вариан запустить сам интерпретатор и подать на него файл
Какой по вашему тут еще может быть третий вариант ?
если вы делаете это на компе руководителя то можно запускать команды по удаленке или просто по ssh

Miroslavux, ну, так вам верно ответили — настроить открытие этих файлов в вашем DE программой sh.
Если DE не отличает sh-файлы от текстовых — сначала создать MIME-описание с уточнением маски *.sh.
1. положить все скрипты в одну папку и сделать доя нее -R +x
2. положить все файлы начальника на файловую систему где для nix все файлы всегда +х (как вариант smb)
ps: решение без задачи
Положите скрипты в папку с ntfs или fat32 там все файлы исполняемые 🙂
Saboteur @saboteur_kiev Куратор тега Linux
software engineer
Нужно просто осознать, что в Linux не существует ассоциаций файлов по расширениям.
Расширение для Линукса — просто часть файла после последней точки, система никаких действий к этому не привязывает.
Поэтому единственный способ делать .sh файлы исполняемыми — ставить на них флаг executable через
chmod +x file.sh
Другой вариант — запускать сам баш с передачей ему файла как аргумент (потому что бинарник bash-а уже с executable).
bash file.sh
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать

astronaut808 @astronaut808
devops engineer
чтобы постоянно не указывать интерпретатор в терминале, можно сделать скрипт исполняемым.
1. указать в скрипте интепретатор — указать путь до bash-интерпретатора после #!
#!/bin/bash
по умолчанию он такой.
можно проверить whereis bash
2. выполнить команду, чтобы сделать исполняемым
chmod +x script.sh
3. после этого можно запускать его просто как ./script.sh
Ответ написан более трёх лет назад
Miroslavux @Miroslavux Автор вопроса
whereis bash
bash: /usr/lib/bash /bin/bash /usr/share/bash /usr/share/man/man1/bash.1.xz /usr/share/info/bash.info.xz
./script.sh
bash: ./script.sh: Отказано в доступе
А код такой
#!/bin/bash
echo «Hello world»
Как исполнить скрипт при запуске docker-контейнера?
Здравствуйте! Вопрос, возможно, несколько избит, но ответа на него я не нашел. А похожие вопросы на тостере, как в и гугле не помогли. Я буду премного благодарен тем людям, что уделят немного своего времени и дадут развернутый ответ! И так, задача минимум — запустить apache при старте контейнера Задача максимум — выполнить bash скрипт при старте контейнера Я опишу варианты которые я пробовал. 1. Сборка простейшего образа и запуск контейнера из консоли Dockerfile FROM ubuntu:14.04
RUN apt-get update && \ apt-get install -y apache2
В консоли: sudo docker build -t apache . sudo docker run -dit —name cont_apache apache /bin/bash service apache2 start В ответ код контейнера, docker ps чист. docker logs cont_apache сообщает о запуске апача — Starting web server apache2 . Но сам контейнер почему-то умирает. хотя флаг -d установлен. Попытался: sudo docker run -dit —name cont_apache apache service apache2 start Результат точно такой же. 2. Сборка образа и запуск апача при помощи CMD Dockerfile: FROM ubuntu:14.04
RUN apt-get update && \ apt-get install -y apache2 CMD ["service" "apache2", "start"]
В консоли: sudo docker build -t apache . sudo docker run -dit —name cont_apache apache /bin/bash service apache2 start Контейнер запущем, висит как демон, перехожу в контейнер: root@2a97628fd78b:/# service apache2 status * apache2 is not running Апач не запустился. Почему? 3. Сборка образа с проброской bash скрипта и его выполнение Dockerfile: FROM ubuntu:14.04
RUN apt-get update && \ apt-get install -y apache2 COPY ./apache2_start.sh /root/apache2_start.sh CMD ["chmod", "777", "/root/apache2_start.sh"] CMD ["/root/apache2_start.sh"]
Script apache2_start.sh: #!/bin/bash
service apache2 start echo "127.0.0.1"
В консоли: sudo docker build -t apache . sudo docker run -dit —name cont_apache apache В docker ps контейнера нет. В логах docker logs cont_apache: * Starting web server apache2 AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.3. Set the ‘ServerName’ directive globally to suppress this message * 127.0.0.1 Пробовал также с запуском bash из консоли: sudo docker run -dit —name cont_apache apache /bin/bash В результате контейнер висит в docker ps. Docker logs conf_apache чист. А в самом контейнере: root@d2c9831773a9:/# service apache2 status * apache2 is not running Итог. Я попытался добиться нужного результата разными способами, но ни одним у меня не вышло. Очевидно, что я допускаю ошибки в работе с докером. Я буду очень! благодарен за конструктивную помощь в данном вопросе как в целом, так и что в каком конкретном случае я делал не так. Конечно, эти примеры высосаны из пальца, и можно найти кучу примеров запуска окружения при помощи docker compose. Но моя цель разобраться в вопросе, и уже в дальнейшем использовать всякие крутые штуки вроде docker compose