Как сделать функции созданными в сценарии удара, сохраняются как функции в .bashrc?

У меня есть простое решение для видео YouTube: Chrome с Fedora 13 и выше.

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

cd /home/USERNAME/Desktop
ln -s /home/USERNAME/.cache/google-chrome/Default/Cache youtube
4
23.02.2011, 02:35
4 ответа

Если я понимаю Ваш вопрос правильно, Вы должны source или . Ваши файлы. Например, в Вашем .bashrc и забота о порядке (только Вы знаете):

source .topic1rc
source .topic2rc

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

9
27.01.2020, 20:46

То, что Вы делаете, не работает потому что каждый bash .topic1rc вызывает новую оболочку удара как дочерний процесс, и нет никакого способа передать среду, переменные оболочки, или не функционирует назад к родительскому процессу, оболочка удара, которой Вы интересуетесь.

То, что Вы хотите сделать, использовать . команда (также доступный как более подробное source — любой делает то же самое). Это читает данный сценарий в текущей оболочке, а не в новую оболочку. Так:

#my long .bashrc file
. ~/.topic1rc
. ~/.topic2rc

(Это, вероятно, хорошо работает, чтобы почти все использование опустило путь, начиная с основного ~/.bashrc обычно выполняется, когда Вы входите в систему, и Ваш корневой каталог является Вашим первоначальным рабочим каталогом, но это - намного лучшая практика для обстоятельного объяснения его.)

6
27.01.2020, 20:46

Как другие объяснили, Вы запускаете те скрипты в новой оболочке, которая умирает после того, как они работали. Необходимо получить файлы с также

. .topic1rc

или

source .topic1rc

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

Можно подвергнуть все конфигурационные файлы каталогу, сказать ~/.bash.d, и затем имейте это как единственное содержание Вашего .bashrc файл:

if [[ -d ~/.bash.d ]]
then
    for conf_file in ~/.bash.d/*
    do
        if [[ -f $conf_file ]]
        then
            source "$conf_file"
        fi
    done
fi

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

1
27.01.2020, 20:46
  • 1
    Можно также сделать это функцией и иметь несколько каталогов конфигурации, именно это я в настоящее время делаю, взглянул на свой bashrc в github.com/jdevera/dotfiles/blob/master/bashrc –  Jacobo de Vera 22.02.2011, 11:05
  • 2
    Если Вы собираетесь заключить conf_file переменную в кавычки в своей исходной команде, это - вероятно, хорошая практика для заключения в кавычки его в Вашем [[псевдокоманда, также. Это, по-видимому, на самом деле не требуется, так как удар, кажется, разворачивает переменные по-другому в нем, чем, но это помогло бы предотвратить случайное удаление их в других местах... К остроумию: сравните: foo='test this thing'; touch $foo; [[ -f $foo ]] && echo true || echo false по сравнению с foo='test this thing'; touch "$foo"; [[ -f $foo ]] && echo true || echo false (выполните их из пустого каталога для улучшенной исправности), –  lindes 22.02.2011, 12:21
  • 3
    , который я всегда заключаю в кавычки снаружи [[, но никогда внутри, с тех пор там не разделяет или расширение шарика внутри [[. Исправленный mywiki.wooledge.org/BashFAQ/031 –  Jacobo de Vera 23.02.2011, 17:30

Обратите внимание на это, когда Вы будете использовать source или . команды, по умолчанию в ударе, аргумент файла будет разыскиваться в $PATH если это не содержит / символ. Вы хотите также

source ./.topic1rc 

или

shopt -u sourcepath
source .topic1rc
0
27.01.2020, 20:46

Теги

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