Для чего-то более сложного, чем простая команда, используйте функцию оболочки вместо псевдонима:
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.