Проблема оболочки: псевдоним не расширяется
У меня следующая проблема: у меня есть много тестовых сценариев, которые в настоящее время выполняются с использованием 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 будет указывать на скрипт, который устанавливает среду оболочки. В моем случае, чтобы экспортировать alias
es, а также необходимые функции скрипт выглядит так:
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).