Вызов псевдонима с другим псевдонимом + параметры

Я постараюсь быть кратким, но достаточно понятным:

ОС представляет собой интерфейс между человеком и электронными компонентами. Linux — это ядро ​​с инструкциями для понимания очень широкого диапазона аппаратных средств, но у него нет интерфейса. Ни консоли, ни окон, ни команд, ничего похожего. Вот почему вы всегда должны говорить «GNU/Linux», когда ссылаетесь на стандартную ОС «linux», которую использует большинство людей. GNU — это «оболочка» стандартного ядра Linux с достаточными ресурсами, чтобы заставить аппаратное обеспечение делать то, что пытается выполнить пользователь.

Ubuntu, Debian, Fedora, Redhat, Slackware и т. д. – это "разновидности". Набор (обычно )программного обеспечения GNU в виде интерфейсов, устроенных как (иногда )один человек хочет «формировать взаимодействие с пользователем» с помощью цветов, эффектов, инструментов и т. д.

0
24.06.2020, 20:34
2 ответа

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

alias foo='echo ' bar=hello

Тогда foo barприведет к запуску echo hello:

$ foo bar
hello

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

grp () {
  local pat="${@: -1}"
  "${@:1:$#-1}" | grep "$pat" | less
}
alias grp='grp '

Тогда:

$ grp pac -Q nvidia
lib32-nvidia-utils 440.82-1
nvidia-dkms 440.82-2
nvidia-settings 440.82-1
nvidia-utils 440.82-2
opencl-nvidia 440.82-2

Конечно, это не сработает со сложными псевдонимами, например, использующими конвейеры:

$ alias foo='bar | cat'
$ grp foo nvidia
cat: nvidia: No such file or directory
2
18.03.2021, 23:25

РЕДАКТИРОВАТЬ :Я не одурачился. Неважно.

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

grp() {
  less -f <( grep ${@:2} <( $1 ))
}

вызывается как grp 'pac -Q' nvidiaв соответствии с запросом.

0
18.03.2021, 23:25

Теги

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