2012-05-22 3 views
1

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

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

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

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

Благодаря

+0

Вы уверены, что пользователь работает источников скриптов '/ эт/profile' от его или ее' .profile'? – choroba

+0

@choroba Да. Я положил «эхо», и он работает. – INS

ответ

0

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

bash script_name.sh 

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

shopt -s expand_aliases 

alias my_alias="echo my_alias" 

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

export -f MyFunction 
2

/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 

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

+0

Я думаю, что ваш ответ похож на мое решение. Я нашел это по ошибке, просматривая документацию bash, а затем через архив stackoverflow. – INS