Как сделать файл (например, скрипт .sh) исполняемым, чтобы его можно было запускать из терминала

245

У меня есть файл script.sh, и тип этого файла - файл шеллскрипта. Я хочу сделать этот файл как application / x-исполняемый файл. Как я могу это сделать?

Зияддин Садыгов
источник
1
Возможный дубликат Как мне запустить .sh файлы?
Карел
Это не дубликат, потому что я специально спросил о том, чтобы сделать его application / x-исполняемым. Другой вопрос - просто открыть файл sh в терминале.
Зияддин Садыгов

Ответы:

326

Вы можете пометить файл как исполняемый:

chmod +x filename.sh

Затем вы можете выполнить это так:

./filename.sh

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

gedit ~/.bashrc

Добавьте это в конец файла:

alias <new name>='/home/<full path to script>/filename.sh'

Откройте новый сеанс терминала или введите source ~/.bashrcсвой терминал, чтобы применить. Затем просто используйте новое имя, чтобы запустить скрипт.

rɑːdʒɑ
источник
Знаете ли вы, как использовать команду sudo после ввода команды как: "alias command1 = '/home/user_name/dir/script.sh'. В моем случае это работает без sudo, но не с ним.
Aditya
Вам нужно перезапустить bash после редактирования .bashrc run: exec bash, чтобы перезапустить bash.
Сампат Перера
2
Почему исполняемый файл будет, ./filename.shа не только filename.sh?
user1993
@ user1993 да, я также ищу способ сделать его исполняемым просто, filenameа не./filename
MycrofD
@ user1993 Как правило, использование ./filename.shуказывает файл в текущем каталоге, а использование filename.shуказывает файл в текущем каталоге или любом каталоге PATH. Первое использование удаляет любую неопределенность относительно того, к какому файлу осуществляется доступ. В этом случае вы пытаетесь выполнить сценарий с помощью bash или другого интерпретатора (в силу того, что он считается #!/bin/bashпервой строкой в ​​вашем сценарии), просто введя имя файла. Для этого использования требуется указание каталога. Кроме того, вы можете попробовать, bash filename.shчто, кажется, работает с неопределенным каталогом.
a505999
37

Есть два способа сделать файл исполняемым:

GUI Метод:

Перейдите на вкладку «Права», затем установите флажок «Выполнить: [] Разрешить выполнение файла как программы».

введите описание изображения здесь

Терминал / Командный метод:

Вы можете использовать:

cd /to/my/required/directory

Тогда беги

chmod +x filename.extension

Или просто запустите:

chmod +x /path/to/your/filename.extension

chmod также есть более продвинутые опции:

Пробелы должны показать, что это разделено: - rwx --- ---

Первый набор ---- Пользователь. Вторым является Группа, а последним является Другой (кто-либо еще)

r означает «Чтение», «w» - «Запись» и «x» - «eXecute».

Таким образом, чтобы позволить всем читать это, но только Группа для выполнения и Пользователь для чтения и записи (но по какой-то причине не выполнять) будут:

-rw- rx- r-- Но это будет добавлено к команде как:

chmod +rw-rx-r-- /path/to/file.extension

chmodТакже можно сделать это в цифрах. Он основан на двоичном коде (я думаю, что это 1,2 и 4)

Итак, есть эти цифры:

Выполнить пользователем есть 100. Выполнить по группе есть 010. Выполнить другим - 001

Написать пользователем есть 200. Написать по группе есть 020. Пиши другим есть 002.

Читается пользователем 400. Читать по группам есть 040. Читать другим есть 004.

Затем вы складываете их вместе, чтобы получить желаемую комбинацию.

Таким образом, разрешить всем читать это, но только Group для выполнения и User для записи (но по какой-то причине не выполнить) будет:

400 + 040 + 004и 010и200

Это в сумме составляет 600 + 050 + 004 = 654.

Затем вы можете запустить команду.

chmod +654 /path/to/file.extension установить это.

И чтобы установить все разрешения, вы можете набрать:

chmod +rwxrwxrwx /path/to/file.extension

Или (это немного легче написать, но труднее запомнить каждый):

chmod +777 /path/to/file.extension

Наконец, вы можете сделать:

chmod -777 /path/to/file.extension

Отнять все разрешения у всех.

А также:

chmod +300 /path/to/file.extension

Чтобы добавить чтение и запись для пользователя, не затрагивая другие разрешения (например, разрешения на выполнение).

Этот веб-сайт имеет очень полезную маленькую галочку с сеткой, с помощью которой вы можете пометить нужные опции и дать вам команду:

введите описание изображения здесь

Однако не все возможные комбинации целесообразно использовать; основные из них следующие:

755 - Ownerимеет все, Groupи Otherможет читать и выполнять

700 - Ownerесть все

644 - Ownerможет читать и писать, Groupи Otherможет читать

600 - Ownerумеет читать и писать

И, если вы используете нетривиальные группы пользователей:

775 - Ownerумеет читать и писать, Groupа Otherможет читать

770 - Ownerи Groupесть все, и Otherумеет читать и исполнять

750 - Ownerимеет все, и Groupможет читать и выполнять

664 - Ownerи Groupумеет читать и писать, и Otherумеет просто читать

660 - Ownerи Groupумеет читать и писать

640 - Ownerумеет читать и писать, Groupумеет читать

777 и 666 используются редко, кроме как в / tmp.

Спасибо Илмари Каронен за то, что он указал на те, которые в общем использовании!

Тим
источник
Разве это не основано на восьмеричном (8-основное) вместо двоичного (2-основанное)? В двоичном коде вы можете иметь только 0 и 1, а в восьмеричном - 0, 1, ... 6, 7
Justinas
Двоичный файл @Justinas, в котором 7 = 4 + 2 + 1 - 111, представляет чтение, запись и выполнение.
Тим
8

Бегать:

chmod +x /path/to/file.sh

Чтобы сделать его неисполнимым, запустите:

chmod -x /path/to/file.sh

Например, я создал .shфайл:

vi tester12.sh

После того, как я напишу некоторый код в редакторе vi, я выйду из редактора vi:

:wq!
chmod +x tester12.sh
./tester12.sh
Джим
источник