Как изменить ПУТЬ в рамках сценария оболочки?

Мой любимый

find . -name <i>filename</i> | xargs grep -in '<i>pattern to search for</i>'

То, что делает вышеупомянутая команда, является находкой файл имени x и затем ищет, сказал, что файл для любого шаблона Вы ищете. Невероятно полезный, если Вы ищете конкретный бит кода в файле, это находится где-нибудь в Ваших подкаталогах.

29
30.06.2016, 03:13
3 ответа

Необходимо использовать source или eval или порождать новую оболочку.

При выполнении сценария оболочки, новая дочерняя оболочка порождена. Эта дочерняя оболочка выполнит команды сценария. Родительская среда оболочки останется нетронутой чем-либо, происходит в дочерней оболочке.

Существует много различных методов для управления этой ситуацией:

  1. Подготовьте исходный файл файла containg список команд к source в текущей оболочке:

    export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
    export PATH=$JAVA_HOME/bin:$PATH
    

    и затем получите его

    source sourcefile
    

    обратите внимание, что нет никакой потребности в sha-ударе при начинании исходного файла, но это будет работать с ним.

  2. Подготовьте сценарий evalfile.sh, который печатает команду для установки среды:

    #!/bin/sh
    echo "export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22"
    echo "export PATH=$JAVA_HOME/bin:$PATH"
    

    и затем evaluate это:

    eval `evalfile.sh`
    
  3. Настройте и выполните новую оболочку:

    #!/bin/sh
    export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
    export PATH=$JAVA_HOME/bin:$PATH
    
    exec /bin/bash
    

    обратите внимание на это, когда Вы введете exit в этой оболочке Вы возвратитесь к родительской.

  4. Вставьте псевдоним Ваш ~/.bashrc:

    alias prepare_environ='export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22; export PATH=$JAVA_HOME/bin:$PATH;'
    

    и назовите его при необходимости:

    prepare_environ
    
40
27.01.2020, 19:38
  • 1
    я заметил это source работы только для bash. Вывод для ksh: /bin/ksh: source: not found, для sh: sh: 0: source: not found. Ответ ниже нужно рассмотреть для этих оболочек. –  Danny Lo 08.04.2015, 12:19
  • 2
    @dannylo, Вы правы, но вопрос ясно bash центральный. –  andcoz 08.04.2015, 16:29
  • 3
    'Экспорт' требуется с $PATH - который, по-видимому, уже существует? –  esskov 27.12.2017, 18:56
  • 4
    @esskov обычно это не. Я помню только старую старую версию sh на AIX, который потребовал его (приблизительно 1992), но, вероятно, это была своего рода ошибка. –  andcoz 17.01.2018, 15:35

Вы могли сделать это при помощи встроенного источника:

. script_name

Некоторые оболочки обеспечивают псевдоним, названный источником:

source script_name
19
27.01.2020, 19:38

установил Chocolatey @ unix, вы можете просто запустить RefreshEnv, чтобы получить обновленные переменные среды в текущий сеанс

деталь

-1
27.01.2020, 19:38

Теги

Похожие вопросы