Как выполнить скрипт bash?

19

Итак, я написал свой первый скрипт bash:

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

Я знаю, что он имеет правильное расположение для bash и является исполняемым:

$ 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по умолчанию отсутствует, потому что кто-то может использовать его в гнусных целях. Представьте себе скрипт с именем lsdrop в каталоге, вы заходите в этот каталог, запускаете, lsи этот скрипт делает что-то плохое.

Пока вы занимаетесь этим, вы можете сделать его более переносимым, запустив shell вместо bash, используя:

#!/bin/sh

или запустив bash независимо от того, где он установлен, если он установлен:

#!/usr/bin/env bash
pupeno
источник
Я уже сделал это с помощью chmod + x myscript.sh. Я сделал это неправильно?
Андрей
1
Вы, вероятно, пропали без вести. / Я добавил его в ответ.
Пупено
1

В дополнение к совету Фернандеса, поставьте перед ним точку, например:

./myscript.sh

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

harrymc
источник
1

Есть 3 способа выполнить скрипт bash. С примером myscript.sh в качестве скрипта, который вы хотите выполнить.

Способ 1

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

$ chmod + x myscript.sh

$ ./myscript.sh

Способ 2

запустить скрипт как текущий пользователь. если скрипт bash написан хорошо, в нем не должно быть ошибок.

$ bash myscript.sh

Способ 3

похож на метод 2, но короткий путь. обратите внимание, что это основано на предположении, что вы используете оболочку bash в текущем сеансе.

$. myscript.sh

надеюсь это поможет!:)

Джимми М.Г. Лим
источник