3

Чтобы настроить мой опыт работы с bash, есть ли способ использовать .bashrc для вызова общих наборов команд. Например, я нашел этот набор команд для поиска строки поиска в текстовых файлах,

find /directory -type f -print0 | xargs -0 grep -i 'search string'

Я хотел бы иметь возможность вспомнить это с помощью пользовательского псевдонима, такого как `grepfindfile, а затем просмотреть вышеприведенный набор команд, отображаемый в bash так же, как последняя команда извлекается из истории.

Или мне нужно было бы создать какой-нибудь скрипт bash? Как и файлы bashrc, пользователи командной строки делятся своими сценариями производительности? Как они называются? Мои любимые виджеты Bash?

-

CF. Та же проблема, что и здесь, для VIM. Как создать ярлык для команды поиска и замены в vim?

4 ответа4

3

Я бы проголосовал за старомодный способ: создайте каталог bin в вашем домашнем каталоге и добавьте его в PATH (некоторые дистрибутивы будут делать это по умолчанию, если при входе в систему будет найден ~/bin ). Затем создайте любые сценарии, которые могут оказаться там полезными.

Зачем?

  1. Псевдонимы и функции оболочки приятно иметь, но часто они есть только в самой командной консоли. Вы не можете вызывать их из других программ (например, xargs) или оболочек. Не так с файлами сценариев. Вы можете вызывать их как любую другую команду UNIX без ограничений. Если закодировано с #!/bin/usedshell текущая оболочка не имеет значения, и они также могут вызываться из любой другой оболочки.

  2. Если кто-то изменяет сценарии входа в систему, такие как. * Profile и. * Shrc, необходимо всегда выполнять вход в систему на втором экране, чтобы убедиться, что опечатка не помешает успешному входу (раздражает).

  3. Если мне нужно работать в других пользовательских средах, у меня сразу же становятся доступны мои сценарии, просто добавив мой каталог bin в PATH без необходимости изменять другие параметры среды.

Дополнительная заметка для начинающих:

Не создавайте слишком много удобных сценариев или псевдонимов для действительно простых задач. Придет время, когда будет сложнее запомнить все ваши собственные сценарии, чем запомнить команды unix, на которых они основаны :-)

1

Я обычно помещаю такие команды в скрипты bash в моей директории ~/bin. Мне нравится использовать скрипты лучше, чем функции, потому что скрипт сразу виден всем моим открытым оболочкам.

Для команд, которые я не использую так часто или которые мне нужно каждый раз изменять, у меня есть файл командных строк, который я ищу, используя grep, затем просто копирую и вставляю с экрана в командную строку.

Я также храню очень большой файл истории bash, чтобы команды из истории были доступны в течение как минимум недели после того, как я их использовал. Если я обнаруживаю, что часто повторяю одну и ту же команду, я помещаю ее в сценарий.

Я только что обнаружил это решение в другом месте суперпользователя, который использует команду bash history -s для добавления команд в вашу историю bash. Это решение, вероятно, ближе всего к вашему первоначальному запросу.

1

Начните с сокращения его до

grep -ir 'search string' /directory

Опция -r предназначена для рекурсивного режима.

:-)


В общем, существует три способа сокращения команд.

  1. Псевдонимы: очень простые, допускаются только подстановки команды. Можно положить в ~/.bashrc:

    alias ll="ls -lFh"
    alias md="mkdir"
    

    расширил бы ll ~/music до ls -lFh ~/music .

    У псевдонимов тоже есть свои преимущества - они могут быть расширены внутри строки; вам просто нужно настроить сочетание клавиш для этого. Например, поместите следующее в ваш ~/.inputrc:

    "\e[1;3C": alias-expand-line
    

    Это соответствует клавише Alt Right → .

  2. Для чего-то более сложного (несколько команд, аргументов) - функции позволяют использовать стандартные возможности синтаксиса; также в ~/.bashrc:

    count() {
        sort "$@" | uniq -c | sort -n -r
    }
    

    Они могут включать несколько команд, устанавливать переменные, иметь условия ... все, что вы можете сделать в сценарии оболочки. Они, однако, не могут быть inline-расширены.

  3. Внешние скрипты - почти такие же, как функции, но без foo() { ... } и в отдельном файле. (~/bin является популярным местом.)

    #!/bin/bash
    post() { curl -sF "sprunge=<$1" http://sprunge.us/; }
    
    if [ -z "$1" ]; then
            file=$(mktemp /tmp/sprunge.XXXXXXXX)
            cat > "$file"
            if [ -s "$file" ]; then
                    post "$file"
            else
                    echo "stdin empty" >&2
            fi
            rm -f "$file"
    else
            for file; do
                    echo -n "$file →"
                    post "$file"
            done
    fi
    

    Преимущество размещения сценариев в отдельных файлах одно: они не ограничиваются функциями bash . Было много случаев, когда я начинал с bash скрипта, потом переписывал его на Python, позже он стал Perl ...

0

Вы можете создать функцию в .bashrc следующим образом:

searchString ()
{
  if [ "$1" ] ; then
    find /directory -type f -print0 | xargs -0 grep -i "$1"
  else
    echo "usage ..."
  fi
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .