Як зробити файл (наприклад, .sh скрипт) виконуваним, щоб його можна було запустити з терміналу


245

У мене є файл script.sh і тип цього файлу - це файл оболонки. Я хочу зробити цей файл як файл application / x-виконуваний файл. Як я можу це зробити?



1
Можливий дублікат Як запустити .sh файли?
карел

Це не дублікат, тому що я спеціально запитав про те, щоб зробити його застосунком / x-виконуваним. Інше питання просто задає відкриття файлу sh у терміналі.
Зіяддін Садігов

Відповіді:


326

Ви можете позначити файл як виконуваний:

chmod +x filename.sh

Потім ви можете виконати його так:

./filename.sh

Якщо ви хочете використовувати іншу команду для запуску, ви можете додати псевдонім:

gedit ~/.bashrc

Додайте це в кінці файлу:

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

Відкрийте новий термінальний сеанс або введіть source ~/.bashrcсвій термінал для подання заявки. Потім просто використовуйте нове ім'я для запуску сценарію.


Чи знаєте ви, як використовувати команду 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 означає Read, w для Write і 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

Додавання для читання і запису для користувача, не впливаючи на інші дозволи (наприклад, Виконати дозволи).

На цьому веб-сайті є дуже корисна маленька сітка, що дозволяє позначити потрібні параметри, і це дає вам команду:

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

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

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 використовуються рідко, крім in / tmp.

Дякуємо Ілмарі Каронен за вказівку на спільне використання!


Чи він не базується на восьмеричному (8-базному), а не на двійковому (2-базному)? У двійковій формі ви можете мати лише 0 і 1, а в восьмеричній - 0, 1, ... 6, 7
Юстінас

@ Джустінас двійковий у тому, що 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.