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

Да, музыка (купленная у нас или иначе) учитывает вашу квоту хранения; однако при покупке песен не учитывается квота. Таким образом, вы можете продолжать покупать песни, и они будут доставлены на ваш аккаунт и на все ваши компьютеры, которые синхронизируют папку, даже если вы превысили квоту.

Это на самом деле FAQ:

Что произойдет, если я перейду через свою квоту хранения, купив музыку? Музыкальный магазин позволит вам покупать больше музыки, когда вы превысите квоту на хранение. Если вы превысили квоту на хранение, вы не сможете добавлять больше файлов в свою учетную запись со своего рабочего стола или из Интернета, пока не удалите достаточно файлов, чтобы получить доступ к своей квоте.
36
задан 5 October 2011 в 17:24

5 ответов

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

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

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

[F1]
21
ответ дан 25 May 2018 в 18:27
  • 1
    Спасибо за ваш быстрый ответ. Возможно, ваше решение работает, но мне нужно вручную отредактировать файл bashrc, чтобы сохранить строку «aliac brc = ....». Я пытаюсь разработать gui для изменения переменной окружения. Поэтому я не могу редактировать файл bashrc другого компьютера вручную. – shantanu 5 October 2011 в 20:57
  • 2
    Вы должны запустить source ~/.bashrc в оболочке, из которой вы хотите изменить среду. Вы не можете изменить его из другого процесса. Возможно (в глобальном масштабе) добавление этого псевдонима может быть частью процесса установки вашего графического интерфейса. – Florian Diesch 5 October 2011 в 22:13
  • 3
    так что я помещаю вашу команду alias ранее в скрипт, а затем вызываю brc, когда я хочу указать свой .bashrc, или мне нужно поставить эту команду alias в файл где-нибудь? – user137717 25 June 2016 в 22:08
  • 4
    То, что я закончил, - это продолжение ответа Флориана Дьеша. Вы можете просто использовать многострочный псевдоним: alias brc = 'chmod a + x ~ / .bashrc; source ~ / .bashrc «Я все еще довольно новый, поэтому я не уверен, что это считается« плохой практикой ». Это действительно работает. – A_user_appears 11 January 2018 в 21:22

Попробуйте:

exec bash

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

13
ответ дан 25 May 2018 в 18:27
  • 1
    Спасибо за ваш ответ. Он работает, но висит процесс. – shantanu 5 October 2011 в 20:55
  • 2
    Это заменяет текущий процесс bash новым. Это не намного короче или проще, чем использование source, но уничтожает любые переменные и так, что пользователь установил вручную - что может или не может быть того, что вы хотите. – Florian Diesch 5 October 2011 в 22:17

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

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

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

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

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

7
ответ дан 25 May 2018 в 18:27

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

#!/usr/bin/env bash shebang

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

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

2
ответ дан 25 May 2018 в 18:27

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

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

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

0
ответ дан 25 May 2018 в 18:27
  • 1
    Я не думаю, что xdotools доступен по умолчанию – Felipe Almeida 25 January 2016 в 04:17
  • 2
    Я осмелюсь сказать, что он недоступен, по умолчанию. – Cbhihe 28 March 2016 в 21:42
  • 3
    Я придумал этот ужасный «раствор». много лет назад. В итоге я использовал псевдоним: alias .a='source ~/.bash_aliases'. – user84207 28 March 2016 в 23:21

Другие вопросы по тегам:

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