Параметр noexec оболочки Bash Цель использования

Для чего-то более сложного, чем простая команда, используйте функцию оболочки вместо псевдонима:

thead () {
    head -- "$1" | cut -d, -f1- | column -s, -t
}

Эта функция оболочки будет запускать headсо своим первым аргументом, а затем отправлять результат по конвейеру (, хотя, поскольку cutполучает все столбцы из-за -f 1-, это часть, вероятно, можно удалить; Я оставлю это здесь, как это было в исходном конвейере ).

Или,

thead () {
    head -- "$2" | cut -d "$1" -f1- | column -s "$1" -t
}

... чтобы иметь возможность использовать его как

thead ',' filename

Или даже, чтобы разрешить необязательный разделитель (и использовать запятую, если она не указана ),

thead () {
    local delim=','

    if [ "$#" -gt 1 ]; then
        delim=$1
        shift
    fi
    
    head -- "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
}

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


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


Руководство bashсодержит предложение

For almost every purpose, aliases are superseded by shell functions.

4
10.07.2020, 14:26
0 ответов

Теги

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