Использование Heredoc в псевдонимах Zsh

Как насчет функции оболочки, завершающей цикл?

yourcmd() {
    local arg
    for arg; do
        thing "$arg" || return
    done
}

Где «вещь» - это фактическая команда, которую вы хотите вызвать. Затем просто

yourcmd -a -b -c

Вы можете даже обобщить это на любую команду:

splitargs() {
    local cmd arg 
    cmd="$1"
    shift
    for arg; do
        "$cmd" "$arg" || return
    done
}

Затем

splitargs somecommand -a -b -c
3
18.09.2018, 13:48
1 ответ

Разделитель документа здесь должен быть строкой с разделителями в псевдониме вzsh(это выглядит как ошибка, поскольку вы добавляете этот разделитель при нажатии клавиши ввода ), поэтому:

alias runthing='cd; date << HERE
date
HERE
'

Однако здесь использование псевдонима является неправильным. Рассмотрим, например,:

echo foo || runthing

Поскольку alias— это просто форма замены текста кода, (псевдонимы — это прежде всего функция csh, csh не имеет функций ), это становится

echo foo || cd; date...

Это означает, что dateбудет запущен, даже если echoбыл успешным.

Здесь лучше использовать функцию:

runthing() {
  cd && date << EOF
date
EOF
}

(конечно, не имеет большого смысла скармливать heredoc date, учитывая, что dateне читает свой стандартный ввод, я просто предполагаю, что это было только для примера ).

3
27.01.2020, 21:21

Теги

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