LINUX.ORG.RU

Подстановка алиаса через переменную в BASH

 , ,


1

1

Приветствую!

Помогите разобраться. Пишу скриптик, столкнулся с проблемкой. Скрипт в работе использует алисы доступные пользователю из ~/.bash_aliases. Если имя алиаса явно указать в скрипте, то он срабатывает, если попытаться подставить с помощью переменной - не работает. В скрипте необходимо имено через переменную. Вот пример кода, с сутью проблемы:

#! /bin/bash -i
shopt -s expand_aliases

alias update1='sudo apt-get update' # это для примера, на боевой машине список алиасов уже существует.

update1 # алиас выполняется без проблем

testalias=update1 # создаем переменную с названием алиаса

$testalias

# подстановка названия алиаса происходит, но он не выполняется, а вылетает ошибка "update1: команда не найдена"

Буду благодарен за любую помощь.

Ответ на: комментарий от Yorween

Благодарю за рабочий вариант, Yorween!

Не понял в чем состоит мое извращение, при использовании переменной, необходимый текст в скрипте (алиас-команда) подставляется. Вот только не работает. В Вашем варианте, при оборачивании в функцию работет. Спасибо.

Pashtet ()
Ответ на: комментарий от Pashtet

Не понял в чем состоит мое извращение

Алиасы чисто для сокращения трудоемкости ввода команд. Смысл вводить в скрипты сокращения именно через алиасы, когда есть другие более простые штатные способы подмены исполняемых кусков кода? Поэтому это девиантное поведение

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Я знаю для чего алиасы. Вопрос был практический. Алиасы уже есть на машине, и используются. Включить их в скрипт - решение вполне нормальное, как уже существующую библиотеку кода. «девиантное поведение» не заданный мной вопрос, а Ваш ответ, который вместо предложения решения, дает психиатрические оценки. Вы форумом не ошиблись?

Pashtet ()
Ответ на: комментарий от Pashtet

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

Нет. alias-ы не на машине, а в стартовых скриптах перед интерактивной работы, и только в них и в самой интерактивной работе они и видны.

Потому все дальнейшие рассуждения - чушь.

vodz ★★★★★ ()
Ответ на: комментарий от vodz

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

  1. «в стартовых скриптах перед интерактивной работы» - это и есть «на машине». Если скрипты на машине, то и алиасы из них на машине. Если содержимое файлов не находится на машине, то с необходимостью придется признать, что на машине ничего не находится вообще, кроме последовательностей положительно или отрицательно заряженных магнитных последовательностей на жестком диске.
  2. «и только в них и в самой интерактивной работе они и видны» - Да будет Вам известно, что BASH позволяет встроенными способами использовать алиасы не в интерактивном режиме, для этого предусмотрена специальная ВСТРОЕННАЯ опция «shopt -s expand_aliases» утилиты НАСТРОЙКИ. Это ПРЕДУСМОТРЕНО.
  3. «Потому все дальнейшие рассуждения - чушь.» - В свете вышесказанного - чушь - это изложенные Вами мысли.
Pashtet ()
Ответ на: комментарий от vodz

По умолчанию она выключена. А включённая, когда это необходимо, разумеется помогает. Но не буду продолжать с Вами полемику. Всего доброго.

Pashtet ()
Последнее исправление: Pashtet (всего исправлений: 1)
Ответ на: комментарий от Pashtet

По умолчанию она выключена.

$ man bash | col -b | grep -A 3 expand_aliases
              expand_aliases
                      If  set,  aliases  are expanded as described above under
                      ALIASES.  This option is enabled by default for interac-
                      tive shells.

Но даже не это важно, а то, что эта опция только распознает алиасы из $BASH_ALIASES, а не заполняет её, то есть на вопрос так и остался без ответа - чем эта опция вам помогает.

Всего доброго.

Вот и замечательно.

vodz ★★★★★ ()