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: команда не найдена"

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

А зачем так извращаться, если есть функции? Так будет работать

#!/bin/sh

alias TEsT='ls -l'
F_TEsT () {
    TEsT
}
F_TEsT

Yorween
()

Алиасы для интерактивной работы. В скриптах не по фэншую их юзать.

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

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

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

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

Из man sh

Aliases provide a convenient way for naive users to create shorthands for commands without having to learn how to create functions with arguments. They can also be used to create lexically obscure code. This use is discouraged.

Yorween
()
Ответ на: комментарий от 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
() автор топика
Ответ на: комментарий от Pashtet

ПРЕДУСМОТРЕНО.

Боже, как вас бомбит то. Опция shopt -s expand_aliases по умолчанию включена для интерактива, и что, сильно оно вам помогает для скриптов?

vodz ★★★★★
()
Ответ на: комментарий от 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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.