Рейтинг:0

Как я могу перезагрузить bashrc в скрипте и не ошибиться?

флаг cl

Я написал скрипт, который загружает и устанавливает anaconda3 и некоторые другие зависимости, а затем устанавливает пару модулей Python, используя пункт3.
Дело в том, что мой источник ~/.bashrc не работает, и поэтому пункт3не распознаются. Если я использую исполнительный удар, остальные инструкции после этой команды не выполняются. Что мне делать? Кстати, это мой скрипт:

#!/бин/баш

## Сценарий Bash для настройки среды разработки PX4 в Ubuntu LTS (16.04 и выше).
## Его можно использовать для установки симуляторов (только) или для установки предварительных условий для Snapdragon Flight или Raspberry Pi.
##
## Устанавливает:
## - Общие зависимости и инструменты для всех целей (в том числе: система сборки Ninja, последние версии cmake, git, anaconda3, pyulog)
## - зависимости симулятора jMAVSim
## - Источник PX4/Firmware (в ~/src/Firmware/)

# Предотвращение тайм-аута sudo https://serverfault.com/a/833888
ловушка "выход" INT TERM; ловушка "убить 0" ВЫХОД; судо -v || выход $?; спать 1; пока верно; спать 60; судо-нв; сделано 2>/dev/null &

# Конфигурация Ubuntu
echo "Удалить менеджера модема"
sudo apt-get удалить менеджер модема -y
echo "Добавить пользователя в группу дозвона для доступа к последовательному порту (требуется перезагрузка)"
sudo usermod -a -G dialout $USER

# Обновите CMake и Git
# Установка последней версии cmake (ссылка https://askubuntu.com/questions/355565/#865294)
echo "Установка последней версии CMake"
sudo подходящее обновление && \
sudo apt install -y software-properties-common lsb-release && \
sudo apt очистить все
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"
судо подходящее обновление
sudo apt install kitware-archive-keyring
sudo rm /etc/apt/trusted.gpg.d/kitware.gpg
судо подходящее обновление
sudo apt установить cmake

# Установка последней версии git
echo "Установка последней версии git"
sudo add-apt-repository -y ppa:git-core/ppa
sudo apt-получить обновление
sudo apt-get установить git -y

# Устанавливаем анаконду3
введите conda >/dev/null 2>&1 || { echo >&2 "Установка anaconda3 (python 3.8.8)"; wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh; bash ./Anaconda3-2021.05-Linux-x86_64.sh;}

источник ~/.bashrc
. ~/.bashrc

# Общие зависимости
echo "Установка общих зависимостей"
sudo apt-получить обновление -y
sudo apt-get install git zip cmake build-essential genromfs ninja-build exiftool astyle -y
# убедитесь, что xxd установлен, выделенный пакет xxd начиная с Ubuntu 18.04, но до этого был помещен в vim-common
который xxd || sudo apt установить xxd -y || sudo apt-get install vim-common --no-install-recommends -y
# Требуемые пакеты питона
pip3 установить argparse empy toml numpy
pip3 установить pandas jinja2 pyserial pyyaml
pip3 установить pylog

# зависимости симулятора jMAVSim
echo "Установка зависимостей симулятора jMAVSim"
sudo apt-get установить ant openjdk-8-jdk openjdk-8-jre -y

Hossein avatar
флаг cl
Спасибо, но, похоже, это не вызывает никаких проблем, так как загружается и устанавливается просто отлично (хотя я уже исправил это благодаря вам). двойной источник просто существует, поскольку один раз источник ничего не сделал. они оба тоже ничего хорошего не делают.
Рейтинг:0
флаг in

Попробуйте запустить следующий код после источник ~/.bashrc, из-за чего Bash забывает все запомненные полные пути:

$ хэш -r

Из руководства Баша:

хэш [-r] [-p имя файла] [-dt] [имя]

Каждый раз, когда вызывается hash, он запоминает полные пути команд, указанных в качестве аргументов имени, поэтому их не нужно искать при последующих вызовах. [...] Параметр -r заставляет оболочку забыть все запомненные местоположения.

Рейтинг:0
флаг cl

я должен был использовать оценка к источнику ~/.bashrc успешно. Я сделал это :

eval "$(кошка ~/.bashrc | хвост -n +10)"

Цитата из здесь:

Это поведение специфично для Ubuntu (и, вероятно, наиболее дистрибутивы), поскольку по умолчанию ~/.bashrc файл начинается с короткое замыкание, Ubuntu 18.04, для

пример:

# Если вы не работаете в интерактивном режиме, ничего не делайте
случай $- в
    *и*) ;;
      *) возвращаться;;
эсак

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

и все прошло просто отлично.Кажется, поскольку скрипты работают в неинтерактивном режиме, источник bashrc не имеет никакого эффекта из-за проверки в начале bashrc (по крайней мере, в дистрибутивах на основе Ubuntu). поэтому, используя eval, мы можем обойти это.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.