Проблема оболочки: псевдоним не расширяется

У меня следующая проблема: у меня есть много тестовых сценариев, которые в настоящее время выполняются с использованием MKS Toolkit. Нам удалось запустить эти сценарии с помощью оболочки mingw (msys), но есть и другие сценарии, которые используют некоторые aliasЭто встроенный инструментарий MKS, а не bash.

Проблема в том, что никто не хочет изменять эти сценарии, даже автоматически, используя сценарий. Это означает, что я должен определить и использовать эти псевдонимы. Я попытался определить псевдонимы в файле "/etc/profile" оболочки msys, но безуспешно. Я также пытался использовать shopt -s expand_aliases (в "/etc/profile"), но это тоже не работает.

Может кто-нибудь поделиться идеей о том, как это можно сделать. Имейте в виду, что существующие сценарии должны остаться прежними.

Любые мысли или идеи приветствуются.

Спасибо

2 ответа

Решение

Этот ответ дал мне решение. Это включает в себя определение переменной BASH_ENV перед выполнением

bash script_name.sh

BASH_ENV будет указывать на скрипт, который устанавливает среду оболочки. В моем случае, чтобы экспортировать aliases, а также необходимые функции скрипт выглядит так:

shopt -s expand_aliases

alias my_alias="echo my_alias"

function MyFunction {
    echo "MyFunction(DUMB):" $* 
}

export -f MyFunction

/etc/profile источник только для оболочек входа в систему. Если вам нужны псевдонимы в вашем скрипте, вы должны поместить их в отдельный файл и поставить их в сценарии, которые в них нуждаются. Например:

aliases.sh:

alias walrus="echo coo coo cah joo"

script.sh:

#!/bin/bash

shopt -s expand_aliases
. aliases.sh

walrus

а потом

$ ./script.sh
coo coo cah joo

Это, наверное, самый разумный способ сделать это. Если вы настаиваете на том, чтобы вообще не менять скрипты, то вам, возможно, удастся избежать их косвенного выполнения, например:

bash --rcfile aliases.sh -i script.sh

Это скажет bash выполнить интерактивную оболочку (и, таким образом, развернуть псевдонимы и создать наш сценарий псевдонимов перед выполнением script.sh).

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