Автоматически переносить все переменные среды из одной оболочки в другую - PullRequest
2 голосов
/ 09 января 2012

Я хочу перенести все переменные среды одной оболочки (в моем случае: kornshell) в другую оболочку (в моем случае: z-shell) автоматически.

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

Что я пробовал до сих пор:

  1. положить $ export $(ksh -c env | tr '\n' ' ') в .zshrc (файл запуска Zshell).

    Это не сработало, потому что команда выполняется как дочерний элемент текущей оболочки (zsh), которая, следовательно, имеет те же переменные окружения, что иzsh и НЕ окружение kornshell.

  2. в дополнительном сценарии

    #!/usr/bin/ksh
    echo $(ksh -c env | tr '\n' ' ') # for testing if it works
    export $(ksh -c env | tr '\n' ' ')
    

    Эта работа также выполнена.

Любые комментарии высоко ценятся.

Ответы [ 3 ]

4 голосов
/ 12 июня 2012
export $(ksh -c env | tr '\n' ' ')

у меня не работает, потому что "env" возвращает текст вроде:

key1=value1 value2
...

Так что приведенная выше команда расширит $ (ksh -c env | tr '\ n' '') иrun:

export key1=value1 value2

Но это приводит к ошибке:

export: value2: is not an identifier

Обратите внимание, что могут быть другие плохие символы справа от знака "=" в выводе "env",что приведет к ошибкам.

Но есть лучший способ экспортировать среду:

 export -p > myenv.sh

это выводит в Bash

 declare -x key1="value1 value2"
 ....

Похоже, что Bash "объявляет -х "совпадает с" экспорт ".Но в ksh "export -p" печатает

export key1='value1 value2'
...

Теперь мне просто нужно запустить

source myenv.sh 

, чтобы экспортировать все переменные

Но мне также нужно удалить всесуществующие переменные перед экспортом новых.Я нашел решение по адресу: http://www.linuxquestions.org/questions/linux-newbie-8/how-to-unset-environment-variable-in-bash-383066/

Итак, мой окончательный код:

unset `env | awk -F= '/^\w/ {print $1}' | xargs`
source myenv.sh
1 голос
/ 27 июля 2012

Запустите ksh в пустой среде:

export $(env -i ksh -c env | tr '\n' ' ')
1 голос
/ 09 января 2012

Как насчет использования./path/to/your/shell/script.sh для запуска вашего скрипта.Вы можете запустить скрипт оболочки тремя различными способами: 1) /bin/sh /path/to/your/shell/script.sh 2) /path/to/your/shell/script.sh 3) . /path/to/your/shell/script.sh Вы можете проверить его.

...