Intereting Posts
Могу ли я сделать изображение экрана блокировки на два монитора? Настроить постоянную маршрутизацию (Ubuntu 13.04) Безопасно ли использовать Ubuntu при представлении этой ошибки? (несоответствие в ips_enabled (ожидается 1, найдено 0)) переключение между nVidia GeForce 640M и интегрированной графикой Intel 29 пакетов могут быть обновлены – как? Графические сбои, значки и текст исчезают с помощью Thinkpad T450 и Ubuntu 14.10 Gnome Почему htop недоступен для Ubuntu touch? Что представляет собой XML-файл схемы в папке data / glib-2.0 моего приложения Quickly? Я удалил ubuntu, и теперь GRUB больше не загружается в окна Система полностью замораживается с технологией Intel Bay Trail Как создать ярлык для максимизации / минимизации окон в Lubuntu? Не удалось установить и запустить индикатор App / Panel в Ubuntu 14.04 Как подключить сетевой интерфейс, только если он физически присутствует Чтение списков пакетов … Ошибка! Возможно ли для приложения (написанного в Mono C #) запустить консольную команду?

Не удается успешно запустить .bashrc из сценария оболочки

Обычно мы можем использовать исходный файл ~/.bashrc используя эту команду

 source ~/.bashrc 

но если я напишу это в скрипте оболочки и выполним его, ничего не произойдет. Зачем?
Есть какой-либо способ сделать это?

мой код оболочки:

 #!/bin/bash chmod a+x ~/.bashrc source ~/.bashrc 

Также попытался .[dot] вместо source . Тот же результат

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

Напротив, команда source не запускает новый экземпляр оболочки, но использует текущую оболочку, поэтому изменения остаются.

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

 alias brc='source ~/.bashrc' 

Пытаться:

 exec bash 

Это должно перезагрузить ~ / .bashrc, ~ / .bash_aliases и т. Д.

Обычно запускается ваш .bashrc :

 # If not running interactively, don't do anything [ -z "$PS1" ] && return 

Поскольку у вашего скрипта нет набора PS1 (потому что он не является интерактивным), он не сбрасывает путь, потому что он выйдет раньше. Чтобы продемонстрировать, измените свой скрипт:

  #!/bin/bash chmod a+x ~/.bashrc PS1='$ ' source ~/.bashrc 

теперь это позволит вашим скриптам работать с новым .bashrc . Примечание: как только ваш скрипт выйдет, env будет настроен на то, что было до начала сценария. Изменения будут отражены при следующем запуске терминала.

Ни один из других методов не работал для меня [ source /path/to/file vs. . ./path/to/file , alias и т. д.], пока, благодаря этому руководству, я не обнаружил, что используя:

#!/usr/bin/env bash shebang

вместо простого #!/usr/bin/env аргументы передаются интерпретатору, который, я думаю, является ключевым здесь – см. этот документ для получения дополнительной информации.

В любом случае, если исходные команды в любой форме не работают на вас, попробуйте проверить свой shebang, это может быть проблемой 🙂

Я придумал это решение, столкнувшись с этим:

 function re_source { xdotool type 'source ~/.bashrc' xdotool key Return } 

Меня устраивает. Вы можете вызвать это из других функций bash. Возможно, это единственный способ «re_source» без вызова новой оболочки.