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

StackOverflow https://stackoverflow.com//questions/10700048

  •  13-12-2019
  •  | 
  •  

Вопрос

У меня следующая проблема:У меня есть много тестовых сценариев, которые в настоящее время выполняются с использованием Инструментарий МКС.Нам удалось запустить эти сценарии с помощью оболочка mingw (msys) но есть и другие сценарии, которые используют некоторые aliases, которые встроены в MKS Toolkit, а не в 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

Другие советы

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

<Сильные> псевдонимы.sh :

alias walrus="echo coo coo cah joo"
.

<Сильный> Сценарий :

#!/bin/bash

shopt -s expand_aliases
. aliases.sh

walrus
.

а затем

$ ./script.sh
coo coo cah joo
.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top