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


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


175
2017-12-16 12:27


Источник


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


Ответы:


хорошо, вы можете сделать это, делая

chmod +x filename.sh

поэтому он будет выполняться, когда вы его вызываете.

./filename.sh

и вы также можете получить доступ к этому скрипту как к приложению.

откройте свой терминал и введите, как показано ниже, в своем домашнем каталоге.

gedit .bashrc

затем в открывшемся файле введите это в последней строке.

alias <Name_with which you wanna call it >='./filename.sh'

сохрани и закрой .

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

убедитесь, что вы разместили его в домашнем каталоге.

еще

alias <Name_with which you wanna call it >='./<path to your script >.sh'

Надеюсь, это поможет.


235
2017-12-16 12:33



Вы знаете, как использовать команду sudo после ввода команды как: «alias command1 =» /home/user_name/dir/script.sh. В моей работе она работает без sudo, но не с ней. - Aditya
Вам необходимо перезапустить bash после редактирования запуска .bashrc: exec bash для перезапуска bash. - Sampath Perera
Почему исполняемый файл ./filename.sh и не только filename.sh? - user1993
@ user1993 да, я также ищу способ сделать его исполняемым только filename и не ./filename - MycrofD
@ user1993 Как правило, используя ./filename.sh указывает файл в текущем каталоге и использует filename.sh указывает файл в текущем каталоге или в любом каталоге PATH. Первое использование устраняет любую неопределенность в отношении доступа к файлу. В этом случае вы пытаетесь выполнить скрипт с помощью bash или другого интерпретатора (в силу предполагаемого #!/bin/bash как первая строка в вашем скрипте), просто введя имя файла. Для этого использования указан каталог. Кроме того, вы можете попробовать bash filename.sh который, похоже, работает с неуказанным каталогом. - a505999


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

Метод GUI:

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

enter image description here

Метод терминала / команды:

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

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,

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

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

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

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

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

enter image description here

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

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.

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


30
2018-06-18 12:22



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


Бег:

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

6
2018-06-18 12:39