получите мой ~/.bash_aliases из сценария не в ~ /

Первый Выпуск UNIX включал программу резервного копирования на магнитную ленту, названную "касанием". Так как это было разработано на основе возможностей Первой файловой системы Выпуска, это не имело понятия "группы" (Первый Выпуск только имел "пользователя" и "другие" биты полномочий), и использовал 16-разрядный формат времени. Четвертый Выпуск UNIX расширил возможности файловой системы и заменил "касание" новой "tp" программой для создания и чтения резервных копирований на магнитную ленту. Точно так же, когда Седьмой Выпуск, UNIX был выпущен в январе 1979, он показал новый набор функций файловой системы и новую программу резервного копирования на магнитную ленту, названную "tar" (для "Ленты ARchiver").

Так, 1979 это.

Источник: https://github.com/libarchive/libarchive/wiki/FormatTar

6
30.09.2014, 21:54
3 ответа

Разница в области применения и синтаксически является очень тонкой:

$ ./updater

является эквивалентом

$ /bin/bash ./updater

, он запускает скрипт (если он помечен как исполняемый и на файловой системе, установленной на вариант - Последняя форма работает, даже если одно из этих условий не выполнено). Это означает, что он порождает новый экземпляр оболочки и питает его содержание сценария. Таким образом, любые, определенные в нем псевдонимы, ограничены продолжительностью интерпретации оболочки, которая является только до конца скрипта.

$ . updater
$ . ./updater
$ source updater
$ source ./updater

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

Также поэтому вы иногда видите файлы Shell init ( ~ / .bashrc в случае bash), который выглядит так:

#!/bin/bash
for n in ~/etc/bash/*; do
    . $n
done

где ~ / etc / bash Может выглядеть как:

~/etc/bash/
|-- bash.10.env
|-- bash.20.aliases
`-- bash.30.func

(имена довольно явно объясняют). Всякий раз, когда вы добавляете некоторые файлы в каталог in in, все, что вам нужно сделать, чтобы применить изменения, - это . ~ / .bashrc . Для чего вы можете иметь псевдоним, конечно. Это также может быть расширено - например, имеющие специализированные инициализацию в зависимости от имени хоста (или фазы луны с использованием POM из BSG-Games).

Одно большое предупреждение для этих установок: обязательно сделайте файлы init «Re-Apperent» в том смысле, что не имеет значения, сколько раз вы их истощаете в одной оболочке - например переменные, которые вы можете захотеть сохранить Определяется условно:

VAR=${VAR:-"value"}

вместо безоговорочно:

VAR="value"
9
27.01.2020, 20:20

Я не думаю, что вы не можете сделать это со сценарием . Чтобы использовать скрипт, вам придется источник, а не выполнить, как другие объяснили. Другой подход для использования функции. Добавьте эти строки к вашему ~ / .bashrc :

updater(){
    cp ~/newAliases ~/.bash_aliases
    source ~/.bash_aliases
}

затем запустить Updater и ваши псевдонимы будут возобновлены и источны.

6
27.01.2020, 20:20

Вы должны источнить файл В противном случае псевдонимы имеют очень короткую продолжительность жизни: продолжительность вызова оболочки.

У меня это в моем .Bashrc :

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

, чтобы прочитать в псевдониме. И это псевдоним:

alias realias='source ~/.bash_aliases'

в начале моего .bash_aliases файл. После обновления я просто выдаю команду realias .

7
27.01.2020, 20:20

Теги

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