Не запускаются sh файлы в ubuntu

Обновлено: 02.07.2024

Проверяется щелчком правой кнопкой мыши свойств, чтобы проверить, был ли он исполняемым и был ли он ..

Но что бы я ни делал, при двойном щелчке по нему запускается gedit. Я пробовал "Открыть с помощью", но там не отображается приложение терминала. Я искал в сети, но нашел способ связать файл, не объединяя его в один «файл ярлыка»

Также проверьте владельца и разрешения. Имеет ли пользователь, щелкающий по нему, разрешение на его запуск? Ваши команды не могут быть правильными - вы ссылаетесь на ssh_home.sh и /ssh_home , которые не являются одинаковыми файлами. @Misery: Это /bin/sh не так /usr/bin/sh . ( /usr/bin/sh будет работать в системах, где /bin и /usr/bin в одном каталоге; я не думаю, что это относится к Ubuntu>)

Я знаю, что это давно, но если кто-то спросит, у меня есть этот ответ.

  1. Открыть наутилус
  2. Меню Файлы -> вкладка поведения
  3. Запускать исполняемые текстовые файлы при их открытии

В более поздних версиях этот параметр находится в: меню «Файлы» -> «Правка» -> «Настройки» -> вкладка «Поведение».

В Ubuntu 14.10 переместите указатель мыши в верхнюю часть экрана, и появится строка меню «Файл», «Редактировать» и т. Д. Нажмите РЕДАКТИРОВАТЬ -> Настройки -> вкладка Поведение

Это должен быть принятый ответ ИМХО. Я был довольно расстроен, пытаясь понять, почему я не смог запустить скрипт оболочки из Nautilus. Работал. Щелкните правой кнопкой мыши по моему сценарию оболочки в файловом браузере. Создана ссылка. Затем перетащите ссылку на рабочий стол. Также сделал шаг выше в обзоре файлов -> Настройки-> запустить вместо просмотра. Одна сложность заключается в том, что это влияет на все исполняемые файлы. (Это может быть то, что вы хотите.) Отличный ответ! В Ubuntu 18.04 я установил «Спросить, что делать», чтобы я мог запускать или отображать его каждый раз, когда дважды щелкаю такой файл. Благодарность!

Я думаю, что было бы лучше использовать файл запуска для вашего сценария, создав

/Desktop/ssh_home.desktop файл со следующим содержимым:

Таким образом, вы получите кликабельную иконку, которая запустит ваш скрипт.

Возможно, вам также придется установить флаг исполняемого файла с помощью chmod :

Этот метод работает, но я предпочитаю решение с одним файлом . @michel Если весь скрипт выполняется ssh host , он вам не нужен, просто измените строку Exec на Exec=ssh host . Это единственное решение, которое сработало для меня.

«Ловушка» для меня заключалась в том, что я щелкал правой кнопкой мыши по файлу, чтобы найти способ изменить поведение (чтобы скрипт запускался вместо открытия в gedit). Не щелкай правой кнопкой мыши! Скорее откройте из «обычной» строки меню:

Изменить-Preferences-Behavior и изменить на «запустить» или «спрашивать каждый раз».

Комментарий: На мой вкус должен быть способ запуска программы с помощью щелчка правой кнопкой мыши тоже. Тем более, что щелчок правой кнопкой мыши приводит к меню «открыть с помощью», которое позволяет искать «открыть с помощью bash», однако «bash» не включен в качестве опции .

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

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

Виды программ в Linux

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

Все программы можно поделить на несколько типов:

  • Бинарные программы - содержат инструкции процессору уже готовые к выполнению, большинство программ находятся в таком формате, они быстрые и выполняются сразу же системой;
  • Программы на байт-коде - это уже не процессорные инструкции, а инструкции определенной виртуальной машины, которая может их выполнять, без виртуальной машины такие команды не могут быть выполнены. Такие программы потребляют больше ресурсов, но тоже достаточно быстрые, их преимущество в том, что они могут выполняться без изменения везде где может работать виртуальная машина. К таким программам можно отнести программы на Java.
  • Скриптовые программы - эти программы состоят из набора команд в виде обычного текста, которые выполняет специальный интерпретатор. Такие программы более медленные, но зато они проще в разработке и их код можно легко и быстро изменить.

А теперь перейдем к запуску программ.

Запуск программ в терминале

Изначально в операционных системах Unix и Linux не было графического интерфейса, поэтому программы запускались командами из терминала. Сейчас это тоже возможно и достаточно активно используется опытными пользователями. Синтаксис запуска программы выглядит таким образом:

/путь/к/файлу/программы параметры

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

Разработчики придумали обходной путь. Была создана переменная PATH, в которой хранятся все пути к папкам где обычно находятся программы - /bin, /sbin, /usr/bin, /usr/sbin и так далее. Вы можете посмотреть ее содержимое командой:

И можно передать параметры после пробела:

Когда программа находится не в этих каталогах, нужно указать к ней полный путь:

Если же вы хотите запустить программу через терминал ubuntu, которая находится в текущей папке, то ситуация будет немного другой. Система выполняет только поиск по папкам из переменной PATH, в текущей директории она не ищет. Поэтому, если вы наберете имя исполняемого файла, то получите ошибку. Нужно указывать полный путь, как вы помните путь к текущей папке будет ./:

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

имя_переменной = значение команда

По умолчанию эта команда открывает настройки утилиты sudo в редакторе Vim, но с этой переменной окружения настройки откроются в редакторе nano.

Запуск программ от имени другого пользователя

Вы уже знаете как запустить программу в терминале linux, а что насчет других пользователей? В Windows достаточно часто используется запуск программ от имени администратора чтобы программа могла получить больше прав доступа в системе. В Linux для этого используется утилита sudo. Ее имя можно расшифровать как switchuserdo - изменить пользователя и выполнить. По умолчанию утилита выполняет команду от имени суперпользователя root:

sudo команда
sudo whoami

sudo -u имя_пользователя команда
sudo -u postgres whoami

Команда whoami (кто я) выводит имя текущего пользователя.

Как запустить программу в фоне

Иногда возникает необходимость запустить долго выполняющуюся программу в терминале так, чтобы она не мешала дальше работать. Для этого можно использовать запуск программы в фоновом режиме linux:

dd if=/dev/zero of=

Система выведет PID, уникальный идентификатор программы, который вы потом можете использовать чтобы закрыть ее командой kill:

Как запустить скрипт в Linux

Мы уже говорили, что программы делятся на бинарные и интерпретируемые. Раньше мы говорили только про бинарные программы. Для запуска интерпретируемых нужен непосредственно интерпретатор, к таким программам относятся написанные на таких языках, как Java, Python, Perl, Ruby, PHP, NodeJS и многих других. Синтаксис запуска такой программы отличается:

интерпретатор /путь/к/файлу/программы параметры

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

А Java программы нужно запускать так:

java -jar program.jar

Для файлов интерпретируемых программ флаг исполняемости необязательный, поскольку они передаются в виде параметра основной программе. Только Bash скрипты составляют исключение. Вы можете запустить скрипт интерпретатором:

Или же просто набрать путь к скрипту:

Оболочка сама определяет свои скрипты по флагу исполняемости и выполняет их. Если флаг исполняемости не установлен, то его стоит добавить:

sudo chmod u+x ./script.sh

Поэтому то и для большинства интерпретируемых программ созданы простые sh скрипты которыми их можно быстро запустить.

Запуск программ Linux в графическом интерфейсе

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

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

Точно так же работает запуск скриптов в графическом интерфейсе. Вы можете найти все ярлыки из меню в каталоге /usr/share/applications/. Любую программу можно запустить двойным щелчком отсюда. Но давайте посмотрим что находится внутри ярлыка, для этого откройте его в текстовом редакторе:

Кроме всего прочего, в строке Exec указана команда, которая выполняет запуск программы linux, когда вы делаете двойной клик на ярлыке. Вы можете взять один из существующих ярлыков и сделать на его основе свой. Здесь указано просто имя программы. Но важно заметить, что лучше указывать полный путь в таких местах, как ярлыки, скрипты, cron и так далее это уменьшит количество ошибок, поскольку вы не можете знать проверяет ли система в этом случае PATH или ищет программу только в текущем каталоге. Теперь вы знаете все о том как запустить программу на linux.

Выводы

В этой статье мы рассмотрели как запустить программу через терминал ubuntu или в других дистрибутивах Linux. Несмотря на то, что это кажется очень простой темой, тут есть свои интересные моменты, которые могут быть полезны. Но вы о них уже знаете. Если у вас остались вопросы, спрашивайте в комментариях!

В данной статье пойдет речь о том, как запускать сценарии командной оболочки (shell скрипты) в Ubuntu.

Что такое sh скрипт

Если кратко, sh скрипт - это файл, в котором описываются последовательно выполняемые команды.

Подробнее о сценарии командной оболочки можно прочесть в Wikipedia: Сценарий командной строки.

В такой файл мы можем вписать все команды, которые выполняем в терминале, то есть, которые исполняются командной оболочкой нашей системы.

Стоит упомянуть, что расширение .sh вовсе не обязательно, так как в Unix-подобных операционных системах нет требований к расширению имени файла, однако для скриптов командной оболочки выделено расширение .sh.

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

Запускать скрипты sh из командной строки легко.

1. Сделать файл скрипта исполняемым (если он еще таковым не является):

2. Запускаем скрипт, просто указав путь до него:

Если скрипт находится в текущей директории, то нужно указать ./ перед именем файла скрипта:

Иногда требуются права суперпользователя для запуска скрипта, тогда просто перед скриптом пишем команду sudo:

Можно запускать скрипты, непосредственно указывая интерпретатор: sh, bash и другие:

Но не советую так делать на постоянной основе.

Как запустить sh в файловом менеджере Ubuntu (Nautilus)

В файловом менеджере (Nautilus) Ubuntu sh скрипты запускаются двойным кликом по файлу:

Как запустить sh в файловом менеджере Ubuntu

Нужно убедиться, что в свойствах файла на вкладке "Права" установлена галочка "Выполнение" - "Разрешить выполнение файла как программы":

Как запустить sh в файловом менеджере Ubuntu

Решаем проблему файлового менеджера Ubuntu при запуске скриптов sh

По умолчанию, после установки системы Ubuntu, если вы попытаетесь выполнить скрипт двойным кликом, то файл у вас откроется в текстовом редакторе:

Решаем проблему файлового менеджера Ubuntu при запуске скриптов sh

Чтобы решить эту проблему, открываем "Параметры", переходим на вкладку "Поведение", в пункте "Исполняемые текстовые файлы" выбираем "Спросить что делать" или "Запустить":

Решаем проблему файлового менеджера Ubuntu при запуске скриптов sh

Разница их в том, что при выборе пункта "Спросить что делать", будет выбор в каком режиме запустить скрипт:

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

Как сделать так, чтобы терминал не закрывался после завершения sh скрипта в Ubuntu.

Когда мы запускам какой-либо скрипт из файлового менеджера, выбрав "Запустить в терминале":

У нас откроется окно терминала. Но после выполнения всех команд, описанных в sh скрипте, окно терминала закроется. В результате, мы не может просмотреть лог (историю) выполнения.

Чтобы решить эту проблему, переходим в "Параметры" терминала. В параметрах выбираем наш профиль и переходим на вкладку "Команда", в пункте "При выходе из команды" выбираем "Держать терминал открытым":

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

В данной статье я приведу несколько распространенных элементарных ошибок с которыми сталкиваются новички.

Не указан интерпретатор

Первой строкой в скрипте традиционно указывается интерпретатор с помощью которого следует исполнять последующие команды. Выглядит это следующим образом:


Здесь может быть указан любой интерпретатор, хоть на PHP пиши скрипты:

но будь добр путь к нему указать.

Скрипту не дали право на исполнение

Второй частой проблемой с запуском скрипта оказывается отсутствие прав на исполнение. Это решается с помощью присвоения специального флага файлу командой chmod:

После этого скрипт можно запустить написав в терминале ./script_file находясь в том же каталоге, в котором лежит скрипт или указав до него необходимый путь.

Не указан путь к скрипту

При обращении к скрипту находясь в отличном от его расположения каталоге (папке) не забудь указать полный или относительный путь к нему. Например, если скрипт лежит по адресу /home/user/scripts/script, а ты, только открыв терминал и находясь по пути /home/user пишешь ./script, то ничего не произойдет. Для обращения к скрипту либо перейди в каталог скрипта:

или указывай полный (можно и относительный) путь к нему:

Попытка обратиться к скрипту лишь по имени

Если находясь в одном каталоге со скриптом под названием script просто написать в терминале слово:

терминал будет не исполнять твой файл из текущего каталога, а искать одноименные команды. Для того чтобы запустить файл скрипта пиши его имя с указанием пути:

Синтаксические или логические ошибки

В случае, если все вышеописанные проблемы исключены, то можно предположить, что в скрипте имеются ошибки в коде, в таком случае остается лишь еще раз тщательно перепроверить исходный код, проверить правильность написания всех команд и конструкций. Если скрипт скачан из сети, то обратиться за помощью с разъяснением непонятных его частей к поисковым системам.

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