bash
содержит все утилиты, которые вам действительно нужны. Если вы хотите выполнить несколько команд с помощью одной команды, вы можете написать свои собственные сценарии оболочки или написать функции.
Функции просты
Несколько дней назад я определил функцию cs
чтобы изменить каталог и вывести его через ls
.
function cs() { cd $1 && ls ; }
$1
является первым аргументом. Если вы хотите использовать список всех аргументов, используйте $@
.
Это может быть вызвано как
$ cs my_directory
Это здорово, чтобы быстро сгруппировать несколько команд в текущем сеансе. Вы можете поместить функцию в конец вашего ~/.bashrc
чтобы загружать ее при каждом новом экземпляре bash
.
Скрипты довольно мощные
Сценарии выполняются в своем собственном процессе. Это означает, что любые переменные, которые вы назначаете, являются локальными для этого процесса. Чтобы написать сценарий, поместите шебанг вверху. Он состоит из символов #!
затем путь к интерпретатору, который выполнит ваш файл. Шебангс может включать
#!sh
#!/bin/bash
#!/usr/bin/perl
В сценарии оболочки вы можете сделать что-то вроде
#!/bin/bash
VARIABLE=42
echo "The variable is $VARIABLE" # echo appends a newline
echo "I'm now going to Google"
firefox http://www.google.com
Не забудьте сделать скрипт исполняемым через
$ chmod +x my_script
Затем он может быть выполнен как
$ ./my_script # from the current directory
$ ~/path/to/my_script # absolute path, ~ is your User directory.
Синтаксис bash содержит условные выражения, циклы, переключатели и почти все. Если вам не нравится низкая производительность или вам нужен более приятный синтаксис, вы можете легко научить себя нескольким строкам Perl или Python.
Видя, что вы напечатали
Эти решения зависят от знания того, что вы хотите сделать, прежде чем сделать это. Если это не так, вы можете посмотреть файл истории (по умолчанию ~/.bash_history
) или использовать команду history
.
$ history 5
перечисляет 5 последних команд с порядковым номером. В моем случае это дает
1892 function foo() { cd $1 ; ls ; }
1893 foo ..
1894 history
1895 history 15
1896 history 5
Вы можете легко использовать этот список команд, чтобы написать функцию или скрипт оболочки.
Быстрое домашнее решение
Вот решение для записи макросов. Он использует две пользовательские функции и встроенный Perl-скрипт для интересной обработки.
function create-marker() { echo "Starting the recording" ; }
function process-marker() { history | perl -ne's/^\s*\d*\s*//; chomp; push @commands, $_; }{ pop @commands; push @macro, pop @commands until $commands[-1] eq "create-marker" or !@commands; print "$_\n" for reverse @macro;' ; }
Эта сессия
$ create-marker
Starting the recording
$ cd ~
$ ls
# omitted
$ firefox http://www.google.com
$ process-marker
Создает следующий вывод:
cd ~
ls
firefox http://www.google.com
Затем вы можете легко скопировать и вставить это в новый скрипт.
Примечание: у меня нет Mac, и я проверил это на Ubuntu. Пути могут отличаться, но концепции разумны.