В Windows я могу написать файл, содержащий команды для cmd (обычно .cmdили .batфайлы). Когда я нажимаю на эти файлы, он открывает cmd.exeи запускает команды, содержащиеся в файле.
Как бы я сделал это в Ubuntu?
Я уверен, что это дубликат, но я не могу найти свой ответ.
Это похоже на эти вопросы, но они не отвечают на вопрос:
Во-первых, наиболее распространенным является запись файла, убедитесь, что первая строка
#!/bin/bash
Затем сохраните файл. Далее отметьте его как исполняемыйchmod +x file
Затем, когда вы нажмете (или запустите файл из терминала), команды будут выполнены. По соглашению эти файлы обычно не имеют расширения, однако вы можете сделать так, чтобы они заканчивались .shили любым другим способом.
Несколько заметок:
Любой (и я имею в виду любой) файл может быть выполнен в Linux при условии, что в первой строке указан путь к программе, которая должна интерпретировать файл. Типичные примеры включают /bin/python, /bin/sh, /bin/dash, но даже нечетные шары работают вещи , как/bin/mysql
Баш это полный язык. Это намного сложнее, чем cmd.exe в Windows. Он имеет сильный язык программирования, который поддерживает функции, циклы, условные выражения, строковые операции и т. Д.
Эти документы могут помочь, если у вас возникнут проблемы.
Если вы не хотите делать файл исполняемым, вы можете запустить его, передав его в качестве аргумента bash: bash file/to/run.sh
Простой пример Bash
#!/bin/bash
echo "This is a shell script"
ls -lah
echo "I am done running ls"
SOMEVAR='text stuff'
echo "$SOMEVAR"
Второй способ заключается в записи команд с помощью script. Беги, scriptпотом просто делай вещи. Когда вы закончите делать тип вещи exitи скрипт создаст для вас файл со всеми «вещами», которые вы сделали. Это менее используется, но работает довольно хорошо для создания таких вещей, как макросы. man scriptдля получения дополнительной информации.
Возможно, вы захотите изменить это /bin/bashна /bin/shbash, даже не Ubuntu по умолчанию.
TC1
@ TC1 Он установлен по умолчанию, поэтому не имеет значения, установлен он по умолчанию или нет.
Карлос Кампдеррос
1
Я хотел бы отметить, что /bin/dash(который /bin/shобычно является символической ссылкой) намного быстрее, чем bash (я измерял примерно в 15 раз быстрее). Если это вообще возможно, используйте /bin/dashдля сценариев оболочки :)
MiJyn
4
Если вы находитесь в той же папке, что и файл, убедитесь, что ./file.sh
coteyr
1
Я попробовал оба метода, но если я попытаюсь дважды щелкнуть файл скрипта bash, он просто откроет текстовый файл в geany / gedit, готовый для редактирования. Я бы хотел, чтобы скрипт выполнялся по двойному щелчку. Этот вопрос содержит более подробную информацию о том, что я хочу сделать.
тимаро
15
Вы имеете в виду запись в файл с помощью сценария оболочки? Вот несколько способов:
touch file
Этот метод просто создает файл, но если файл уже существует, он просто меняет дату модификации на время, когда вы использовали эту команду.
echo "text"> file
Этот метод перезаписывает содержимое fileв text. Если вы хотите очистить файл, вы можете просто сделать это:
echo ""> file
Скажем, вы хотите написать более одной строки, и не хотите использовать тысячи echoкоманд, вы должны использовать эту команду:
cat << EOF > file
test
test1
foo
bar
EOF
Это позволяет вам написать несколько строк в одной команде. Содержание fileтогда будет таким:
test
test1
foo
bar
Если вы хотите добавить файл, замените >на >>.
Надеюсь это поможет!
РЕДАКТИРОВАТЬ : О, я вижу, чтобы вы написали файл в Gedit, используя .shрасширение (необязательно, но это хорошая идея), а затем в файловом менеджере, щелкните правой кнопкой мыши файл, выберите Свойства-> Разрешения и проверьте Allow executing file as program, Тогда вы можете дважды щелкнуть по нему, и он будет работать :). Кроме того, если вы хотите сделать это в терминале, вы можете запустить эту команду, чтобы сделать ее исполняемой (вы можете добавить ее, sudoесли она не принадлежит вам):
На самом деле я хочу написать в gedit файл, содержащий команды терминала. Затем, когда я дважды щелкну этот файл, он запустит эти команды в терминале.
Сет
Отличный ответ, внимательное обновление. Чтобы просто создать файл, я всегда просто использовалtouch filename
TryTryAgain
@TryTryAgain, да, это простой метод, вероятно, быстрее, чем echo "" > file. Это нормально, если я включу этот метод в свой ответ?
MiJyn
@MiJyn Абсолютно включить его, не стесняйтесь. Спасибо
TryTryAgain
Как я могу сделать это для запуска в любом месте в терминале ... как глобальная команда?
Омер
14
Эквивалентом пакетных файлов Windows являются сценарии оболочки, а отличным руководством по началу работы является Bash Scripting .
По большей части команды, которые вы можете вводить в командной строке, могут быть помещены в сценарий оболочки.
Пара вещей, которые отличаются от командных файлов Windows:
Существуют разные интерпретаторы команд, называемые оболочками. По умолчанию используется bash, но если вам интересно, есть и другие, такие как zsh, ksh, dash, perl, python и т. Д.
Чтобы запустить скрипт оболочки, вам нужно сделать исполняемый файл, что вы можете сделать с chmod +x <filename>
В Ubuntu текущим каталогом не является путь поиска программы, поэтому вам нужно запустить ./<filename>, а не<filename>
Имена переменных $<varname>не%<varname>%
Команды в сценарии оболочки по умолчанию не печатаются, как в командном файле.
Расширение имени файла может быть .shили (более привычным) вам не нужно использовать расширение. Поместите #!/bin/bashв самую первую строку файла , которая говорит Ubuntu, какую программу использовать для запуска файла.
Комментарии начинаются с #, а не rem.
Надеюсь, что это поможет и получайте удовольствие от написания сценариев!
/bin/bash
на/bin/sh
bash, даже не Ubuntu по умолчанию./bin/dash
(который/bin/sh
обычно является символической ссылкой) намного быстрее, чем bash (я измерял примерно в 15 раз быстрее). Если это вообще возможно, используйте/bin/dash
для сценариев оболочки :)Вы имеете в виду запись в файл с помощью сценария оболочки? Вот несколько способов:
Этот метод просто создает файл, но если файл уже существует, он просто меняет дату модификации на время, когда вы использовали эту команду.
Этот метод перезаписывает содержимое
file
вtext
. Если вы хотите очистить файл, вы можете просто сделать это:Скажем, вы хотите написать более одной строки, и не хотите использовать тысячи
echo
команд, вы должны использовать эту команду:Это позволяет вам написать несколько строк в одной команде. Содержание
file
тогда будет таким:Если вы хотите добавить файл, замените
>
на>>
.Надеюсь это поможет!
РЕДАКТИРОВАТЬ : О, я вижу, чтобы вы написали файл в Gedit, используя
.sh
расширение (необязательно, но это хорошая идея), а затем в файловом менеджере, щелкните правой кнопкой мыши файл, выберите Свойства-> Разрешения и проверьтеAllow executing file as program
, Тогда вы можете дважды щелкнуть по нему, и он будет работать :). Кроме того, если вы хотите сделать это в терминале, вы можете запустить эту команду, чтобы сделать ее исполняемой (вы можете добавить ее,sudo
если она не принадлежит вам):И запустить:
источник
touch filename
echo "" > file
. Это нормально, если я включу этот метод в свой ответ?Эквивалентом пакетных файлов Windows являются сценарии оболочки, а отличным руководством по началу работы является Bash Scripting .
По большей части команды, которые вы можете вводить в командной строке, могут быть помещены в сценарий оболочки.
Пара вещей, которые отличаются от командных файлов Windows:
Существуют разные интерпретаторы команд, называемые оболочками. По умолчанию используется bash, но если вам интересно, есть и другие, такие как zsh, ksh, dash, perl, python и т. Д.
Чтобы запустить скрипт оболочки, вам нужно сделать исполняемый файл, что вы можете сделать с
chmod +x <filename>
В Ubuntu текущим каталогом не является путь поиска программы, поэтому вам нужно запустить
./<filename>
, а не<filename>
Имена переменных
$<varname>
не%<varname>%
Команды в сценарии оболочки по умолчанию не печатаются, как в командном файле.
Расширение имени файла может быть
.sh
или (более привычным) вам не нужно использовать расширение. Поместите#!/bin/bash
в самую первую строку файла , которая говорит Ubuntu, какую программу использовать для запуска файла.Комментарии начинаются с
#
, а неrem
.Надеюсь, что это поможет и получайте удовольствие от написания сценариев!
источник