Для мелочей, что Вы хотите произойти, если команда оболочки работает, можно использовать &&
конструкция:
rm -rf somedir && trace_output "Removed the directory"
Так же для мелочей, что Вы хотите произойти, когда команда оболочки перестала работать, можно использовать ||
:
rm -rf somedir || exit_on_error "Failed to remove the directory"
Или оба
rm -rf somedir && trace_output "Removed the directory" || exit_on_error "Failed to remove the directory"
Вероятно, неблагоразумно сделать очень много с этими конструкциями, но они могут при случае сделать поток из управления намного более ясным.
bash
действительно кэширует полный путь к команде. Можно проверить, что команда, которую Вы пытаетесь выполнить, хешируется с type
команда:
$ type svnsync
svnsync is hashed (/usr/local/bin/svnsync)
Очистить весь кэш:
$ hash -r
Или всего одна запись:
$ hash -d svnsync
Для получения дополнительной информации консультироваться help hash
и man bash
.
Для очистки всего одной записи, Вам нужен другой флаг:
hash -d svnsync
-r
флаг не берет параметр и будет всегда удалять весь кэш.
(По крайней мере, в ударе 3.2.39 на Debian Lenny)
Есть решения, не упомянутые здесь.
Вы можете отключить хеширование с помощью set + h
или set + o hashall
help set
говорит:
-h - запоминать расположение команд, как они выглядят готов к исполнению. По умолчанию это включено.
hashall - То же, что -h
set -h # включить хеширование
shopt -u checkhash # отключить проверку существования команды
hash -p / some / nonexisting / dir / date date # привязать дату с / some / nonexisting / dir / date
date # bash: / some / nonexisting / dir / date: нет такого файла или каталога
set + h
date # normal вывод даты
Вы можете проверить, существует ли команда, найденная в хэш-таблице, прежде чем пытаться выполнить ее с помощью shopt -s checkhash
help shopt
говорит:
checkhash - Если установлено, bash проверяет, существует ли команда, найденная в хэш-таблице, прежде чем пытаться ее выполнить. Если хешированная команда больше не существует, выполняется обычный поиск пути.
set -h # включить хеширование
shopt -u checkhash # отключить проверку существования команды
hash -p / some / nonexisting / dir / date date # привязать дату с / some / nonexisting / dir / date
hash -t date # prints / some / nonexisting / dir / date
date # bash: / some / nonexisting / dir / date: Нет такого файла или каталога
shopt -s checkhash # включить проверку существования команды
date # нормальный вывод даты
hash -t date # prints / bin / date
Вы можете связать NAME с PATH с помощью hash -p ИМЯ ПУТИ
или BASH_CMDS [NAME] = PATH
:
shopt -u checkhash # отключить проверку существования команды
hash -p / some / nonexisting / dir / date date
date # bash: / some / nonexisting / dir / date: Нет такого файла или каталога
BASH_CMDS [date] = / bin / date
date # нормальный вывод даты { {1}}
Magic: PATH = "$ PATH"
выполняет hash -r
From variables.c
:
/ * Что делать сразу после изменения переменной PATH. * /
void
sv_path (имя)
char * name;
{
/ * hash -r * /
phash_flush ();
}
Попробуйте:
set -h
hash -r
date
hash # печатает 1 / bin / date
PATH = "$ PATH"
hash # выводит hash: hash table empty
csh
, командаrehash
. $lastPartGenome.sam кошки 'код' – kurtm 12.10.2013, 03:21rehash
управляйте также работает наzsh
. – Neil Traft 10.11.2013, 23:35hash svnsync
. – Ioannis Filippidis 09.08.2014, 03:44dash
вместоbash
- дляdash
hash -d
не работает;hash svnsync
работы для обоих как бы то ни было. – Iiridayn 19.07.2016, 03:10