Как создать функцию на основе еще не определенных команд?

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

export SOME_VAR=/path/to/main/folder source $SOME_VAR/loading/stuff.sh --quiet loadApp1 loadApp2 loadApp3 loadApp4 

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

Я думаю, что это потому, что loadApps – это псевдонимы, загруженные в stuff.sh поэтому в момент, когда Bash анализирует мои функции, он еще не знает псевдонимы.

Как я могу сделать это с помощью одной команды без потери переносимости?

PS: Я не хочу копировать псевдоним в мой $HOME/.bashrc потому что их можно изменить в другом месте, и я его не увижу.

  • Псевдонимы в csh
  • обзор кода: автоматическое завершение для псевдонимов bash
  • Совместное использование псевдонимов и настроек PATH между zsh и bash
  • Как копировать или перемещать файлы без запроса на перезапись?
  • Синтаксис определения псевдонима bash
  • Изменить имя команды в Linux
  • Могу ли я установить значения по умолчанию для rsync в режиме без демона?
  • В zsh как установить псевдоним для `less` для получения вывода stderr?
  • 3 Solutions collect form web for “Как создать функцию на основе еще не определенных команд?”

    Если это псевдонимы, вам придется написать:

     myFunction() { export SOME_VAR=/path/to/main/folder . "$SOME_VAR/loading/stuff.sh" --quiet eval ' loadApp1 loadApp2 loadApp3 loadApp4' } 

    псевдонимы расширяются в момент их считывания / анализа. eval такой синтаксический анализ.

    Я бы использовал сценарий, чтобы сделать это, чтобы быть в безопасности:

     #!/usr/bin/env bash export SOME_VAR=/path/to/main/folder source $SOME_VAR/loading/stuff.sh --quiet loadApp1 loadApp2 loadApp3 loadApp4 

    Просто сохраните это в своем $PATH , сделайте его исполняемым и запустите его вместо своей функции.

    Нет проблемы с объявлением функции, содержащей неизвестные команды. Это не значит, что вы попытаетесь выполнить эту проблему.

     $ unknown() { foo; bar; baz; } $ unknown bash: foo: command not found bash: bar: command not found bash: baz: command not found 
    Linux и Unix - лучшая ОС в мире.