Не работает bash linux

Обновлено: 02.07.2024

Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.

2. Как работают скрипты.

В Linux почти не используется расширение файла для опережения его типа на системном уровне. Это могут делать файловые менеджеры и то не всегда. Вместо этого, используются сигнатуры начала файла и специальные флаги. Система считает исполняемыми только те файлы, которым присвоен атрибут исполняемости.

3. Как запустить sh скрипт из командной строки?

Допустим у вас есть скрипт hello.sh состоящий из одной команды.

Чтобы его запустить, надо зайти в каталог, где расположен скрипт, набрать название интерпретатора sh и первым параметров указать ваш файл hello.sh.

Чтобы каждый раз не указывать интерпретатор в терминале, можно сделать скрипт исполняемым.

Для этого необходимо:

1. Указать интерпретатор внутри файла.


Содержимое скрипта hello.sh получается таким:

2. Сделать наш файл исполняемым.

Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости. Для этого используется команда chmod +x и имя файла скрипта:

Запуск скрипта sh в Linux:

Или полный путь от корня:

Теперь вы можете выполнить:


А если нам нужно запустить скрипт на php, то выполните:

Вот так все просто здесь работает.

Так можно запустить скрипт как фоновый процесс, используйте символ & :

Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.

Но у новичков может возникнуть вопрос - как запустить скрипт в Linux, что для этого нужно сделать, что будет происходить и какие команды нужно выполнить. Но сначала нужно рассмотреть как работают скрипты и что такое исполняемость.

Как работают скрипты

В Linux почти не используется расширение файла для опережения его типа на системном уровне. Это могут делать файловые менеджеры и то не всегда. Вместо этого, используются сигнатуры начала файла и специальные флаги. Система считает исполняемыми только те файлы, которым присвоен атрибут исполняемости.

Теперь о том, как работают скрипты. Это обычные файлы, которые содержат текст. Но если для них установлен атрибут исполняемости, то для их открытия используется специальная программа - интерпретатор, например, оболочка bash. А уже интерпретатор читает последовательно строку за строкой и выполняет все команды, которые содержатся в файле. У нас есть несколько способов выполнить запуск скрипта linux. Мы можем запустить его как любую другую программу через терминал или же запустить оболочку и сообщить ей какой файл нужно выполнять. В этом случае не нужно даже флага исполняемости.

Запуск скрипта sh в Linux

Сначала рассмотрим пример небольшого sh скрипта:

Вторая строка - это действие, которое выполняет скрипт, но нас больше всего интересует первая - это оболочка, с помощью которого его нужно выполнить. Это может быть не только /bin/bash, но и /bin/sh, и даже /usr/bin/python или /usr/bin/php. Также часто встречается ситуация, что путь к исполняемому файлу оболочки получают с помощью утилиты env: /usr/bin/env php и так далее. Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости:

chmod ugo+x script.sh

Мы разрешаем выполнять запуск sh linux всем категориям пользователей - владельцу, группе файла и остальным. Следующий важный момент - это то место где находится скрипт, если вы просто наберете script.sh, то поиск будет выполнен только глобально, в каталогах, которые записаны в переменную PATH и даже если вы находитесь сейчас в той папке где находится скрипт, то он не будет найден. К нему нужно указывать полный путь, например, для той же текущей папки. Запуск скрипта sh в linux:

Или полный путь от корня:

Если вы не хотите писать полный путь к скрипту, это можно сделать, достаточно переместить скрипт в одну из папок, которые указаны в переменной PATH. Одна из них, которая предназначена для ручной установки программ - /usr/local/bin.

cp script.sh /usr/local/bin/script.sh

Теперь вы можете выполнить:

Это был первый способ вызвать скрипт, но есть еще один - мы можем запустить оболочку и сразу же передать ей скрипт, который нужно выполнить. Вы могли редко видеть такой способ с bash, но он довольно часто используется для скриптов php или python. Запустим так наш скрипт:

А если нам нужно запустить скрипт на php, то выполните:

Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:

Даже запустить процесс linux не так сложно.

Выводы

Как видите, запуск скрипта sh в linux - это довольно простая задача, даже если вы еще плохо знакомы с терминалом. Существует действительно много скриптов и некоторые из них вам возможно придется выполнять. Если у вас остались вопросы, спрашивайте в комментариях!

При логине в качестве командной оболочки загружается sh(а не bash как было в Debian 6), если запустить X'ы, то в виртуальный терминалах в качестве оболочке используется bash.
У пользователя в качестве оболочки выставлен bash. В какую сторону копать?

OS: Debian wheezy


Изначально симлинк был на dash, переправил на bash не помогло
Изначально симлинк был на dash, переправил на bash не помогло Собственно, в качестве шелла у вас bash. Возможно. я не правильно вопрос понял, что Вы хотите сделать? Собственно, в качестве шелла у вас bash. Возможно. я не правильно вопрос понял, что Вы хотите сделать?
Гм. действительно, ну видимо проблема в том, что сразу после логина bash не подгружает

/.bashrc и необходимо вручную загрузить bash что-бы он это сделал.

Т.е. Вам нужно, чтобы после логина bash загружал настройки из .bashrc?
Гляньте в содержимое Т.е. Вам нужно, чтобы после логина bash загружал настройки из .bashrc?
Гляньте в содержимое


/etc/profile в Debian 6 и Debian 7 идентичны

в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик

/.profile - это тот, который в домашней директории. Там должны быть строчки, проверяющие содержимое переменной $BASH и запускающие

/.bashrc
UPD: Опоздал =(


Спасибо! А почему раньше без этого работало?


Спасибо! А почему раньше без этого работало?

/.profile, либо оно лежало в /etc/profile


Спасибо! А почему раньше без этого работало?

/.profile, либо оно лежало в /etc/profile

/.profile там не было.

/.profile должен быть по умолчанию.

каждый раз, когда я запускаю скрипт с помощью bash scriptname.sh из командной строки в Debian, я получаю Command Not found и затем результат сценария. Таким образом, скрипт работает, но всегда есть Command Not Found заявление печатается на экране.

я запускаю скрипт из /var папка.

вот этот скрипт:

я запускаю его, набрав следующее:

UPDATE-проблема появляется в пустых строках. Каждая пустая строка приводит к команда не найдена. Почему это произошло?

убедитесь, что первая строка:

введите путь к bash, если это не /bin/bash

это Wil конвертировать окончания строк и т. д. Из Windows в формат unix. т. е. он удаляет \r (CR) из окончаний строк, чтобы изменить их с \r\n (CR+LF) to \n (LF) .

другой способ узнать, находится ли ваш файл в dos/Win формат:

результат будет выглядеть примерно так:

это выведет весь текст файла с <CR> отображается для каждого \r символ в файл.

можно использовать bash -x scriptname.sh проследить.

Я также столкнулся с аналогичной проблемой. Проблема, похоже, в разрешениях. Если вы сделаете ls -l , вы можете определить, что ваш файл может не иметь бит выполнения включен. Это не позволит выполнить сценарий. :)

Как @artooro добавил в комментарий:

если скрипт выполняет свою работу (относительно) хорошо, тогда он работает нормально. Ваша проблема, вероятно, одна строка в файле, ссылающаяся на программу, которая либо не находится на пути, не установлена, с ошибкой или что-то подобное.

один из способов-это поставить set -x в верхней части скрипта или запустите его с помощью bash -x вместо bash - это выход на линии перед их выполнением и, как правило, просто нужно посмотреть на вывод команды непосредственно перед ошибкой, чтобы увидеть что вызывает проблему

если, как вы говорите, это пустые строки, вызывающие проблемы, вы можете проверить, что actaully на них. Беги:

и убедитесь, что нет" невидимых " смешных персонажей, таких как CTRL-M (возврат каретки) вы можете получить с помощью редактора типа Windows.

использовать dos2unix в файле сценария.

в блокноте++ перейдите в редактировать ->преобразование EOL затем проверить Macinthos (CR). Это изменит ваши файлы. Я также рекомендую проверить все файлы с помощью этой команды, потому что скоро такая ошибка произойдет.

попробовать chmod u+x testscript.sh

для выполнения этого необходимо указать полный путь например

была такая же проблема. К сожалению

Так что я сделал это, чтобы преобразовать.

проблемы с запуском скриптов также могут быть связаны с плохим форматированием многострочных команд, например, если у вас есть пробел после разрыва строки "\". Е. Г. это:

(обратите внимание, что дополнительное пространство после"\") вызовет проблемы, но когда вы удалите это пространство, оно будет работать отлично.

Это может быть тривиально и не связано с вопросом OP, но я часто ошибался в начале, когда я изучал сценарии

это вызовет ответ "команда не найдена". Правильный способ-устранить пробелы

я тоже не из Cannot execute command . Все выглядело правильно, но на самом деле у меня был неразрывный пробел &nbsp; прямо перед моей командой, которую, конечно, невозможно было заметить невооруженным глазом:

, который, в Vim, выглядел так:

только после запуска bash script checker shellcheck Я нашел проблему.

добавить текущий каталог ( . ) путь, чтобы иметь возможность выполнить скрипт, просто введя его имя, которое находится в текущем каталоге:

я столкнулся с этим сегодня, рассеянно копируя командную строку доллара $ (перед командной строкой) в скрипт.

на Bash для Windows я попытался неправильно запустить

без ./ в начале и получил ту же ошибку.

для людей с фоном Windows правильная форма выглядит избыточной:

вы можете обновить вас .bashrc и и .файлы bash_profile с псевдонимами для распознавания вводимой команды.

.bashrc и и .файлы bash_profile-это скрытые файлы, вероятно, расположенные на вашем диске C:, где вы сохраняете свои программные файлы.

Читайте также: