Перевести псевдоним команды в полную форму

Я использую терминал 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

Мои вопросы:

  1. Можно ли решить эту конкретную проблему с помощью команды оболочки watch?
  2. Можно ли сделать более общий Решение, которое будет "переводить" команду для фактического выражения? Например:

    $ 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, но это вручную. Я ищу автоматизированный способ.

3
задан 4 June 2019 в 09:58

2 ответа

Да, вы можете создать небольшой скрипт под названием 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
1
ответ дан 4 June 2019 в 09:58

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

В принципе, просто введите команду полностью при использовании в автоматизации. Однако вы можете превратить ваши псевдонимы в команду, вместо этого создав исполняемый скрипт:

Содержимое скрипта bash kprod

#!/bin/bash
kubectl --namespace=hello $@

$ @ в конце команды разверните все параметры, которые вы передали в командной строке.

Поместите этот скрипт в папку, которая находится на вашем пути. Таким образом, простой ввод имени запустит скрипт. Хотя это несколько сложнее в настройке, но его так же легко использовать, как и ваш псевдоним. Кроме того, вы также можете использовать его в автоматизации.

1
ответ дан 4 June 2019 в 09:58

Другие вопросы по тегам:

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