Если вы уже находитесь в /path/to каталоге, например, с помощью cd /path/toкоманды, вы можете ввести ./scriptдля запуска вашего скрипта. Не забудьте, в этом случае './' перед 'скриптом'
FrViPofm
120
Еще один способ выполнить его (на этот раз без установки разрешений на выполнение):
bash /path/to/scriptname
Приостановлено до дальнейшего уведомления. источник
26
cd в каталог, содержащий сценарий, или поместите его в папку bin, которая находится в вашем $ PATH
Это будет работать, только если в сценарии установлен бит выполнения. Вероятно, это необходимо решить.
Брайан Окли,
./scriptname.shу меня работает, но scriptname.shдает scriptname.sh: command not found. -rwxr-xr-xэто его разрешения.
Spikatrix
1
Совет cdкуда угодно ведет к еще одному распространенному недоразумению новичков. Если внутри скрипта нет зависимостей, которые требуют его запуска в определенном каталоге (например, необходимость читать файл данных, на который скрипт необъяснимо не дает возможности указать), вам никогда не понадобится cdнигде для его запуска, и очень часто не захочется.
Голос против: это неправильно, если это правильно сценарий Bash.
Tripleee 05
1
Голос за: это нормально для Mac OS X, если ваш сценарий bash находится в том же каталоге
Карл Тейлор,
30
@kot «У меня это работает» очень далеко от «это правильный ответ». Он может работать, если shэто символическая ссылка bashили если в сценарии не используются какие-либо конструкции, специфичные для Bash. В первом случае использование bashвместо shявляется единственным правильным переносимым решением; в последнем случае это неправильный ответ на этот конкретный вопрос, потому что OP спрашивал о совете специально для сценария Bash. Совершение неправильного ответа безответственно; пользователи, которые не понимают разницы, часто пишут здесь, и им нужно показать, почему этот ответ «сработал для меня» не сработал для них.
@kot Повторяю: бывают ситуации, когда это работает (как вы уже выяснили), но в общем случае это неправильный ответ на вопрос в заголовке. По крайней мере, этот ответ должен объяснить условия, в которых он работает; но я предлагаю просто удалить этот ответ.
tripleee
14
Во-первых, вы должны сделать его исполняемым, используя: chmod +x name_of_your_file_script .
После того, как вы сделали его исполняемым, вы можете запустить его, используя ./same_name_of_your_file_script
В этом нет необходимости cd; в качестве аргумента вы можете указать произвольно сложный путь bash; действительно, любая программа, которая принимает аргумент имени файла, работает таким образом (или ужасающе, ошеломляюще сломана).
tripleee
10
Это старая ветка, но я наткнулся на нее, и я удивлен, что никто еще не дал полного ответа. Итак, начнем ...
Учебное пособие по запуску сценария из командной строки!
В: Как мне выполнить это в Терминале?
Заблуждения и конфликты:
Вам не нужно «расширение» (например, .sh, .py или что-нибудь еще), но оно помогает отслеживать вещи. Это не повредит. Однако, если имя сценария содержит расширение, вы должны его использовать.
Вам совсем не обязательно находиться в каком-либо определенном каталоге по какой-либо причине.
Вам не нужно вводить имя программы, которая запускает файл (BASH, Python или что-то еще), если вы этого не хотите. Это не повредит.
Вам не нужно sudoничего этого делать. Эта команда зарезервирована для выполнения команд от имени другого пользователя или пользователя «root» (администратора). Отличный пост здесь .
(Человек, который только учится выполнять скрипты, не должен использовать эту команду, если в этом нет реальной необходимости, например, при установке новой программы. Хорошее место для размещения ваших скриптов находится в папке ~ / bin. Вы можете добраться туда с помощью набрав cd ~/binили cd $HOME/binв командной строке терминала. У вас будут все разрешения в этой папке.)
Чтобы «выполнить этот сценарий» из терминала в системе типа Unix / Linux, вы должны сделать три вещи:
Сообщите системе расположение сценария. (Выбери один)
Введите полный путь с именем сценария (например, /path/to/script.sh). Вы можете проверить полный путь, набрав pwdилиecho $PWD в терминале.
Выполнить из того же каталога и использовать ./в качестве пути (например ./script.sh). Легко.
Поместите сценарий в каталог, который находится в системе, PATHи просто введите имя (например script.sh). Вы можете проверить систему PATH, набрав echo $PATHили, echo -e ${PATH//:/\\n}если вам нужен более аккуратный список.
Сообщите системе, что у сценария есть разрешение на выполнение. (Выбери один)
Вы также можете использовать, chmod 755 /path/to/script.shесли предпочитаете числа. Существует большое обсуждение с прохладным графиком здесь .
Сообщите системе тип сценария. (Выбери один)
Введите название программы перед скриптом. (например, BASH /path/to/script.shилиPHP /path/to/script.php ) Если у сценария есть расширение, такое как .php или .py, оно является частью имени сценария, и вы должны включить его.
Используйте shebang , который, как я вижу, у вас есть ( #!/bin/bash) в вашем примере. Если это первая строка вашего скрипта, система будет использовать эту программу для выполнения скрипта. Нет необходимости набирать программы или использовать расширения.
Используйте «портативный» шебанг . Вы также можете сделать так, чтобы система выбрала версию программы, которая находится первой в PATHсписке, используя, #!/usr/bin/envа затем имя программы (например, #!/usr/bin/env bashили #!/usr/bin/env python3). Есть плюсы и минусы , как тщательно обсуждается здесь .
Довольно хорошее резюме. Возможно, в последнем примере напомните людям, что script.shи script.phpявляются буквальными именами файлов этих сценариев, и что если вы добавите расширение в имя файла, вам нужно будет включить его при запуске сценария (и наоборот; если сценарий не нет расширения, не ставьте его). Это не похоже на, например, DOS, где вы могли опустить .batили в .exeимени файла, а файлы должны были иметь расширение из небольшого набора, чтобы считаться исполняемыми.
tripleee
1
Другой новичок распространенной ошибкой является непонимание разницы между path, /path, ./pathи ~/path. Думаю, вы, вероятно, не хотите здесь объяснять, но, возможно, ссылка на объяснение, например ... о, черт, я должен был опубликовать это.
Это выполняет сценарий в текущей оболочке, которую необходимо вызвать. Это не то, чего ожидает большинство людей, когда вы просто запускаете сценарий. Это может иметь побочные эффекты в вашей существующей среде.
Инженер-программист
-2
Если вы находитесь в каталоге или папке, где доступен файл сценария, просто измените права доступа к файлу в исполняемом режиме, выполнив
chmod +x your_filename.sh
После этого вы запустите сценарий, используя следующую команду.
$ sudo ./your_filename.sh
Над "." представляют текущий каталог. Заметка! Если вы не находитесь в каталоге, в котором находится файл сценария bash, вы меняете каталог, в котором находится файл, используя
cd Directory_name/write the complete path
команда. В противном случае ваш скрипт не сможет работать.
Надеюсь, что все сделают это, потому что я упоминаю все связанные концепции этой конкретной проблемы.
Хасан Шамшир
Как объясняется в других ответах здесь, sudoэто неправильно и потенциально ужасно неправильно, если вы используете его в ненадежном скрипте, который злоупотребляет полномочиями, которые вы ему без надобности дали.
Tripleee
Совет cdкуда-то непонятен, но, вероятно, тоже неверен.
chmod +x scriptname
а потом./scriptname
.Ответы:
$prompt: /path/to/script
и нажмите Enter. Обратите внимание, что вам необходимо убедиться, что у сценария есть разрешения на выполнение.источник
/path/to
каталоге, например, с помощьюcd /path/to
команды, вы можете ввести./script
для запуска вашего скрипта. Не забудьте, в этом случае './' перед 'скриптом'Еще один способ выполнить его (на этот раз без установки разрешений на выполнение):
источник
cd в каталог, содержащий сценарий, или поместите его в папку bin, которая находится в вашем $ PATH
затем введите
если в том же каталоге или
если он находится в папке bin.
источник
./scriptname.sh
у меня работает, ноscriptname.sh
даетscriptname.sh: command not found
.-rwxr-xr-x
это его разрешения.cd
куда угодно ведет к еще одному распространенному недоразумению новичков. Если внутри скрипта нет зависимостей, которые требуют его запуска в определенном каталоге (например, необходимость читать файл данных, на который скрипт необъяснимо не дает возможности указать), вам никогда не понадобитсяcd
нигде для его запуска, и очень часто не захочется.Вы могли сделать:
sh scriptname.sh
источник
sh
это символическая ссылкаbash
или если в сценарии не используются какие-либо конструкции, специфичные для Bash. В первом случае использованиеbash
вместоsh
является единственным правильным переносимым решением; в последнем случае это неправильный ответ на этот конкретный вопрос, потому что OP спрашивал о совете специально для сценария Bash. Совершение неправильного ответа безответственно; пользователи, которые не понимают разницы, часто пишут здесь, и им нужно показать, почему этот ответ «сработал для меня» не сработал для них.Во-первых, вы должны сделать его исполняемым, используя:
chmod +x name_of_your_file_script
.После того, как вы сделали его исполняемым, вы можете запустить его, используя
./same_name_of_your_file_script
источник
Измените свой каталог туда, где находится скрипт , используя cd команду
Затем введите
источник
cd
; в качестве аргумента вы можете указать произвольно сложный путьbash
; действительно, любая программа, которая принимает аргумент имени файла, работает таким образом (или ужасающе, ошеломляюще сломана).Это старая ветка, но я наткнулся на нее, и я удивлен, что никто еще не дал полного ответа. Итак, начнем ...
Учебное пособие по запуску сценария из командной строки!
В: Как мне выполнить это в Терминале?
Заблуждения и конфликты:
sudo
ничего этого делать. Эта команда зарезервирована для выполнения команд от имени другого пользователя или пользователя «root» (администратора). Отличный пост здесь .(Человек, который только учится выполнять скрипты, не должен использовать эту команду, если в этом нет реальной необходимости, например, при установке новой программы. Хорошее место для размещения ваших скриптов находится в папке ~ / bin. Вы можете добраться туда с помощью набрав
cd ~/bin
илиcd $HOME/bin
в командной строке терминала. У вас будут все разрешения в этой папке.)Сообщите системе расположение сценария. (Выбери один)
/path/to/script.sh
). Вы можете проверить полный путь, набравpwd
илиecho $PWD
в терминале../
в качестве пути (например./script.sh
). Легко.PATH
и просто введите имя (напримерscript.sh
). Вы можете проверить системуPATH
, набравecho $PATH
или,echo -e ${PATH//:/\\n}
если вам нужен более аккуратный список.Сообщите системе, что у сценария есть разрешение на выполнение. (Выбери один)
chmod +x /path/to/script.sh
в терминале.chmod 755 /path/to/script.sh
если предпочитаете числа. Существует большое обсуждение с прохладным графиком здесь .Сообщите системе тип сценария. (Выбери один)
BASH /path/to/script.sh
илиPHP /path/to/script.php
) Если у сценария есть расширение, такое как .php или .py, оно является частью имени сценария, и вы должны включить его.#!/bin/bash
) в вашем примере. Если это первая строка вашего скрипта, система будет использовать эту программу для выполнения скрипта. Нет необходимости набирать программы или использовать расширения.PATH
списке, используя,#!/usr/bin/env
а затем имя программы (например,#!/usr/bin/env bash
или#!/usr/bin/env python3
). Есть плюсы и минусы , как тщательно обсуждается здесь .источник
script.sh
иscript.php
являются буквальными именами файлов этих сценариев, и что если вы добавите расширение в имя файла, вам нужно будет включить его при запуске сценария (и наоборот; если сценарий не нет расширения, не ставьте его). Это не похоже на, например, DOS, где вы могли опустить.bat
или в.exe
имени файла, а файлы должны были иметь расширение из небольшого набора, чтобы считаться исполняемыми.path
,/path
,./path
и~/path
. Думаю, вы, вероятно, не хотите здесь объяснять, но, возможно, ссылка на объяснение, например ... о, черт, я должен был опубликовать это.И еще один способ
Что означает точка?
источник
Если вы находитесь в каталоге или папке, где доступен файл сценария, просто измените права доступа к файлу в исполняемом режиме, выполнив
chmod +x your_filename.sh
После этого вы запустите сценарий, используя следующую команду.
$ sudo ./your_filename.sh
Над "." представляют текущий каталог. Заметка! Если вы не находитесь в каталоге, в котором находится файл сценария bash, вы меняете каталог, в котором находится файл, используя
cd Directory_name/write the complete path
команда. В противном случае ваш скрипт не сможет работать.
источник
sudo
это неправильно и потенциально ужасно неправильно, если вы используете его в ненадежном скрипте, который злоупотребляет полномочиями, которые вы ему без надобности дали.cd
куда-то непонятен, но, вероятно, тоже неверен.