Мой .bashrc
файл содержит строку с этим эффектом:
alias prog="/path/to/script.sh $(find $(pwd) -name prog)"
Когда я закомментирую эту строку, Bash запускается практически мгновенно, когда я открываю новый терминал. В этой строке задержка составляет 4-5 секунд, прежде чем появляется мой курсор.
Удаление вложенных команд $(pwd)
и т. Д. Также ускоряет его. Почему это происходит? Можно ли как-то использовать вложенные команды?
find
команде, которая выполняется во время загрузки и может занять много времени, в зависимости от структуры каталогов. Если вы используете одинарные вместо двойных кавычек,find
будет выполняться во время выполнения, когдаalias
вызывается. Это зависит от того, какой рабочий каталог вы хотите использовать, этот текущий во время объявления или во время выполнения. Кстати,$(pwd)
довольно неэффективный способ выразить.
или$PWD
.find
? Как только вы установили его, вы знаете, где он находится. Даже если вы часто обновляете его и меняете его имя, вы можете сохранить символическую ссылку на него, чтобы он всегда был доступен под фиксированным именем.Ответы:
Поскольку подстановка команды находится в двойных кавычках, она оценивается во время определения команды. Это заставляет
find
просматривать содержимое вашего жесткого диска во время.bashrc
работы.Вы, напротив, похоже, хотите, чтобы оно оценивалось во время использования. В этом случае используйте одинарные кавычки:
Обратите внимание, что этот псевдоним потерпит неудачу, если у любого из найденных файлов будут пробелы в именах. Чтобы избежать этого:
Эта последняя форма будет надежно работать для любого типа имени файла.
источник
prog
,find
нужно будет запускаться, тогда как раньше он запускался только один раз (при запуске оболочки).find
, обычно это происходит намного быстрее.prog
и перезапустить,find
если старый путь больше не существует?