Вопрос

Я новичок в сценарии раковины Bash, и столкнулся с проблемой.Я знаю, что я могу перезагрузить файл ".profile", просто делая:

. .profile
.

Но я пытаюсь выполнить то же самое в скрипте Bash, я пишу, и он просто не работает. Любые идеи?Что-нибудь еще, я могу уточнить?

Спасибо

Это было полезно?

Решение

Попробуйте это перезагрузить текущую оболочку:

source ~/.profile
.

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

Попробуйте:

cd 
source .bash_profile
.

Пара проблем возникает при попытке перезагрузить / исходный файл ~ / .profile. [Это относится к Ubuntu Linux - в некоторых случаях детали команд будут разными]

  1. Вы работаете прямо в терминале или в скрипте?
  2. Как вы запускаете это в скрипте?
  3. ad. 1)

    Пробегая это непосредственно в терминале, означает, что не будет создан подпункл. Таким образом, вы можете использовать либо две команды:

    source ~/.bash_profile
    
    .

    или

    . ~/.bash_profile
    
    .

    В обоих случаях это обновит среду с содержимым файла .profile.

    ad 2) Вы можете начать любой скрипт Bash либо, вызывая

    sh myscript.sh 
    
    .

    или

    . myscript.sh
    
    .

    В первом случае это создаст подпульду, который не повлияет на переменные среды вашей системы, и они будут видны только в процесс подпункта. После завершения команды подпункта ни один из экспорта и т. Д. Не будет применяться. Это распространенная ошибка и приводит к тому, что многие разработчики потеряют много времени.

    Для того, чтобы ваши изменения, применяемые в вашем скрипте, чтобы повлиять на глобальную среду, скрипт должен быть запущен с

    .myscript.sh
    
    . Команда

    .

    Чтобы убедиться, что ваш сценарий не работает в подносе, вы можете использовать эту функцию. (Опять же пример для оболочки Ubuntu)

    #/bin/bash
    
    preventSubshell(){
      if [[ $_ != $0 ]]
      then
        echo "Script is being sourced"
      else
        echo "Script is a subshell - please run the script by invoking . script.sh command";
        exit 1;
      fi
    }
    
    .

    Я надеюсь, что это очищает некоторые общие недоразумения! : D. Удачи!

Сценарий Bash работает в отдельном подселете.Для того, чтобы сделать эту работу, вам нужно будет источник и источник другого скрипта.

попробуйте:

#!/bin/bash
# .... some previous code ...
# help set exec | less
set -- 1 2 3 4 5  # fake command line arguments
exec bash --login -c '
echo $0
echo $@
echo my script continues here
' arg0 "$@"
.

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