Я хочу автоматизировать что-то, написав простой скрипт, запускающий последовательно несколько скриптов один за другим. А затем установить псевдонимы в верхней оболочке.
Проблема: немногие из этих команд запускают новую оболочку. И все команды после этого запускаются в предыдущей оболочке. Есть ли способ поставить эти команды в очередь после этой команды в "верхней" оболочке?
Простой пример:

#!/usr/bin/ksh
#normally this ksh is executed deep inside other script i cannot modify
ksh
echo test

Есть ли способ напечатать "test" на оболочке, только что запущенной командой ksh? Обычно тест печатается в предыдущей оболочке - становится доступным после команды "выход". Спасибо за любую помощь.

1 ответ1

0

Четыре варианта, но у каждого из них есть недостаток:

  1. Убедитесь, что команды, которые вы хотите выполнить в ksh, записаны в файл mycmds и запустите ksh в следующей форме:

    cat mycmds /dev/tty | ksh -i
    

    Недостаток: вы теряете возможности редактирования командной строки в ksh.

  2. Убедитесь, что команды, которые вы хотите выполнить в ksh, записаны в файл /tmp/mycmds$$ ; установите переменную окружения MYCMDS в /tmp/mycmds$$ перед запуском ksh -l ; и добавьте следующее в ваш $HOME/.profile:

    if [ -n "$MYCMDS" ] ; then
        . "$MYCMDS"
        MYCMDS=
        export MYCMDS
    fi
    

    Недостаток: каждый, кто использует эту программу, должен изменить свой $HOME/.profile .

  3. Организовать все это таким образом, чтобы команды, которые вы хотите выполнить, были записаны в файл mycmds который затем был получен через . mycmds в начальной оболочке. Поместите все это в определение функции.

    Недостаток: Вместо запуска новой оболочки вы изменяете определения среды и / или псевдонима исходного. Каждый, кто использует эту программу, должен использовать ksh.

  4. Убедитесь, что команды, которые вы хотите выполнить, записаны в файл mycmds и запустите bash в следующей форме:

    bash -i --init-file mycmds
    

    Недостаток: вы получаете удар вместо ksh.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .