grep с heredoc в функции

Проблемный скрипт был создан в Windows, а это означало, что он содержал символы новой строки DOS. Это привело к сбою выполнения сценария на виртуальной машине Unix.

Тот факт, что виртуальная машина работает в Windows, не является проблемой.

2
15.08.2018, 17:15
3 ответа
alias 'gsi=<<eof grep --color'

Псевдоним будет работать так же, как замена текста в препроцессоре, где замена снова интерпретируется как шелл-код.

Ваш не работал, как у вас "$1". С заменой gsi file.txtна cat <<eof | grep --color "$1" file.txtоболочка продолжает интерпретировать эту командную строку, и $1в этот момент является первым позиционным параметром оболочки, который, вероятно, пуст, если только вы не сделали set somethingзаранее. Итак, вам нужно удалить "$1"здесь. Вы также можете удалить UUOC.

gsi() { cat <<eof | grep --color "$1" ; }

неверно с точки зрения синтаксиса, так как после строки cat <<eofотсутствует строка eof.

5
27.01.2020, 21:49

Вы упомянули, что вставляете в терминал. Полностью откажитесь от -документа и используйте подходящую утилиту буфера обмена, напримерxclip(или pbpasteв Mac OS X ). С xclipэто будет сделано как

xclip -o -sel clip | grep --color 'sometext'

См. также 'xclip' и 'xsel' о разнице между этими двумя утилитами.

2
27.01.2020, 21:49

Ваша функция не будет использовать здесь -документ:

gsi () {
   grep --color "$@"
}

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

Конец ввода сигнализируется нажатием Ctrl+D .

Вышеприведенное, возможно, смешало бы вставленное содержимое и результат grep. Чтобы сначала накопить вставленное содержимое и , затем запустить grep, вы можете использовать что-то вроде

gsi () {
    trap 'rm -f "$buffer"' RETURN
    local buffer="$(mktemp)"
    cat >"$buffer" && grep --color "$@" "$buffer"
}

Здесь вставленный вывод помещается во временный файл перед запуском grep. Временный файл удаляется при выходе из функции. Это примерно то, что bashбудет делать за кулисами, когда вы вставите в документ здесь -.

4
27.01.2020, 21:49

Теги

Похожие вопросы