Я использую терминал Ubuntu для управления своими работами. Я создал несколько псевдонимов, которые помогают мне выполнять работу быстрее.
например:
$ alias kprod="kubectl --namespace=hello"
Затем используйте его так:
$ kprod get pods
Одна из моих главных задач - выяснить, когда мое приложение готово к запуску облако, поэтому я называю этот код:
$ kprod get pods | grep APPNAME
Но мне нужно запускать его снова и снова, пока он не будет готов. Я хочу использовать команду watch
для упрощения этой задачи. К сожалению, часы не работают, потому что kprod
является псевдонимом.
$ watch kprod get pods
sh: 1: kprod: not found
watch
? Можно ли сделать более общий Решение, которое будет "переводить" команду для фактического выражения? Например:
$ kprod get pods | TRANSLATE
kubectl --namespace=hello get pods
, которые заставляют его работать с watch
и любым другим приложением?
Использование команды type
похожи, но разные. Как я и пытался, невозможно дать ему полное выражение и «перевести» его, потому что он пытается преобразовать каждый токен выражения отдельно. Конечно, модуль (в моем примере выше) не является псевдонимом строки ...
Например:
$ type kprod get pods
kprod is aliased to `kubectl --namespace=hello'
-bash: type: get: not found
-bash: type: pods: not found
Да, я могу сделать это вручную с помощью команды type
, но это вручную. Я ищу автоматизированный способ.
Да, вы можете создать небольшой скрипт под названием watch_alias
(или любой другой), который расширит псевдоним и затем передаст расширенную команду на watch
. Сохраните следующее как ~/bin/watch_alias
и сделайте его исполняемым (chmod a+x ~/bin/watch_alias
):
#!/bin/bash
## enable alias expansion in scripts
shopt -s expand_aliases
## source the .bashrc file where your aliases should be
. ~/.bashrc
## The first argument of the script is the alias
aliasCom=$1
## Remove the 1st argument from the $@ array (the script's arguments)
shift
## Parse the output of type to get what the real command is
realCom=$(type "$aliasCom" | grep -oP "\`\K.[^']+")
## watch the unaliased command
watch bash -c "$realCom '$@'"
Вы можете запустить это вместо watch
:
watch_alias kprod get pods
Псевдонимы служат для вас ярлыком в терминале. Это не наоборот. Вы собираетесь использовать псевдонимы не так, как они предназначены.
В принципе, просто введите команду полностью при использовании в автоматизации. Однако вы можете превратить ваши псевдонимы в команду, вместо этого создав исполняемый скрипт:
Содержимое скрипта bash kprod
#!/bin/bash
kubectl --namespace=hello $@
$ @ в конце команды разверните все параметры, которые вы передали в командной строке.
Поместите этот скрипт в папку, которая находится на вашем пути. Таким образом, простой ввод имени запустит скрипт. Хотя это несколько сложнее в настройке, но его так же легко использовать, как и ваш псевдоним. Кроме того, вы также можете использовать его в автоматизации.