Як виконати скрипт bash?


19

Тому я написав свій перший баш сценарій:

#!/bin/bash
echo 'hello world!'
exit

Я знаю, що в ньому є правильне розташування для удару та виконується:

$ which bash
/bin/bash
$ chmod +x myscript.sh

Тепер я хочу запустити його з командного рядка, але я отримую помилку:

$ myscript.sh
myscript.sh: command not found

Тому замість цього я спробую це, і це працює:

$ bash myscript.sh
hello world!

Чи так мені завжди потрібно буде його виконати? Я відчуваю, що я виконав інші сценарії, не передуючи цьому bash. Як я можу запустити myscript.sh, не попереджаючи його bash?

Оновлення: Ось добре пояснення, чому і як виконати скрипт bash .

Відповіді:


28

Ви повинні зробити файл виконуваним. Ви можете це зробити за допомогою

chmod +x <filename>

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

./script.sh

Ви можете запускати лише ті файли, які є у вашому PATHабо для того, щоб вказати шлях до них. ./, локальний каталог PATHза замовчуванням не знаходиться , тому що хтось може використовувати його для нечесних цілей. Уявіть, що скрипт, який називається lsскинутим у каталог, заходить у цей каталог, запускається, lsі цей сценарій робить щось погано

Поки ви перебуваєте на ньому, можливо, ви хочете зробити його більш портативним, запустивши shell, а не bash, використовуючи:

#!/bin/sh

або запустивши bash незалежно від того, де він встановлений, поки він встановлений:

#!/usr/bin/env bash

Я вже це робив з chmod + x myscript.sh. Я зробив це неправильно?
Андрій

1
Ви, мабуть, відсутні ./ Я додав це до відповіді.
pupeno

1

Окрім порад Фернандеса, передуйте його таким чином:

./myscript.sh

З міркувань безпеки поточний каталог ніколи не включається в шлях виконання.


1

Існує 3 способи виконання скрипту bash. З прикладом myscript.sh як сценарію, який потрібно виконати.

Спосіб 1

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

$ chmod + x myscript.sh

$ ./myscript.sh

Спосіб 2

запустити сценарій як поточний користувач. якщо сценарій bash добре написаний, він не повинен мати помилок.

$ bash myscript.sh

Спосіб 3

подібний до способу 2, але скорочення. зауважте, що це засновано на припущенні, що ви використовуєте bash shell в поточному сеансі.

$. myscript.sh

сподіваюся, що це допоможе! :)

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