18

Мой файл .bashrc содержит следующую строку:

alias prog="/path/to/script.sh $(find $(pwd) -name prog)"

Когда я закомментирую эту строку, Bash запускается практически мгновенно, когда я открываю новый терминал. В этой строке задержка составляет 4-5 секунд, прежде чем появляется мой курсор.

Удаление вложенных команд $(pwd) и т.д. Также ускоряет его. Почему это происходит? Могу ли я как-то использовать вложенные команды?

1 ответ1

44

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

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

alias prog='/path/to/script.sh $(find "$(pwd)" -name prog)'

Обратите внимание, что этот псевдоним завершится ошибкой, если в любом из найденных файлов есть пробелы в именах. Чтобы избежать этого:

alias prog='find . -name prog -exec /path/to/script.sh {} +'

Эта последняя форма будет надежно работать с любым именем файла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .