Предполагая, что вы хотите дать процессу переменную окружения со значением, которое может отличаться от значения переменной оболочки с тем же именем, которая может находиться в области действия оболочки в момент вызова команда:
a () {
YACY_TIMEOUT=60 yacy -r -d std
}
Это стандартный синтаксис для запуска команды и присвоения ей определенного значения переменной среды. Переменная YACY_TIMEOUT
, если она существует в той же области, что и тело функции a
, не будет изменена.
Это будет работать в любой оболочке POSIX.
Что это , а не делает, так это позволяет вам использовать YACY_TIMEOUT
с "локальным" значением внутри функции перед вызовом yacy
.
В zsh
или любой другой оболочке, которая поддерживает локальные переменные, объявленные с помощью local
, вы можете сделать
a () {
local YACY_TIMEOUT=60
YACY_TIMEOUT=$YACY_TIMEOUT yacy -r -d sth
}
Здесь YACY_TIMEOUT
будет локальным по отношению к функции a
. Внедрение переменной в качестве переменной среды в процесс yacy
происходит так же, как и в первом приведенном мной примере, путем предшествующего вызова присваивания.
Теперь YACY_TIMEOUT
является одновременно локальным и доступным в среде процесса yacy
. Это будет работать в любой оболочке, поддерживающей использование local
для объявления локальных переменных.
Насколько мне известно, единственный способ предотвратить изменения метаданных .
при извлечении архива — это пропустить существующие файлы с опцией --skip-old-files
, доступной в GNU tar
. Это охватывает более .
и приведет к тому, что любые существующие файлы будут сохранены как -, а не перезаписаны версией в архиве.
Я не знаю, почему ваш --transform
не работает. Рекомендуемый подход к добавлению пути при извлечении заключается в «замене» начальной привязки на нужный каталог, , например.tar --transform 's,^,foobar/,'...
. Чтобы избежать путаницы с символическими ссылками, можно добавить суффикс, , например. tar --transform 's,^,foobar/,S'
, который не применит преобразование к целям символической ссылки.