Существует запись в Вашем $PATH
указывая на каталог, к которому Вы не можете получить доступ, и Вы используете версию мерзавца ранее, чем 1.7.10.1.
Когда Вы работаете git lg
мерзавец сначала делает некоторую установку, включая добавление записи в копию $PATH
то, что это использует. Затем это пытается выполнить команду git-lg
, так, чтобы команда переопределила бы псевдоним. Когда это делает это, это добирается, разрешение отклонило ошибку, показанную в Вашем выводе.
Более старые версии мерзавца остановились бы в той точке. Начиная с версии 1.7.10.1, это будет рассматривать ту ошибку то же как команда просто не быть найденным.
Когда Вы выполнили это, поскольку корневой мерзавец смог просмотреть все каталоги в $PATH
, посмотрите что нет git-lg
команда существует, и таким образом, она продолжила бы использовать определенный псевдоним.
Для решения проблемы, можно обновить до более новой версии мерзавца. Другая опция состояла бы в том, чтобы удостовериться, что у Вас есть разрешение получить доступ ко всем каталогам, перечисленным в Вашем $PATH
, или путем предоставления дополнительных разрешений на любом, которые являются проблемой или не включая разрешения в списке.
Это зависит от режима редактирования вашей оболочки. Например, я использую VI-режим и тип esc
и и
и подстановочные знаки будут расширены.
Как насчет
echo rm build/* tmp/*
или, в моей версии bash
, нажав tab tab сразу после того, как wildcard даст мне список соответствующих файлов.
Для "аккуратного удаления файлов" я бы порекомендовал либо использовать флаг взаимодействия с rm
, либо снова префиксовать с помощью echo
echo rm -i f*o
rm -i f*o
Правда, ни то, ни другое не даст вам список впереди, как вы предпочитаете.
На самом деле поведение выглядит следующим образом (как в «Learning the bash Shell» О'Рейли ).
/
если это каталог ). В качестве примера (я попробовал сам ), учитывая каталог, содержащий файлы
aaabbb aaaccc aaaddd
...$ vi a
Esc\ выдаст ...$ vi aaa•
и оставит вас в режиме вставки на •
. ...$ vi a
Esc*выдаст ...$ vi aaabbb aaaccc aaaddd •
и оставит вас в режиме вставки в •
(, насколько я пробовал, он не добавляет /
, если это каталог ). ...$ vi a
Esc= выведет aaabbb aaaccc aaaddd
и вернет вам ...$ vi a
, оставив вас в командном режиме. Понятно, что завершающий *
в используемом вами регулярном выражении означает подразумеваемый ; ты мог бы написать
rm build/ tmp/
, а затем нажал Esc*на обоих(да, насколько я могу судить и попробовать, Esc*расширяет все подстановочные знаки только в пробеле -слово с разделителями, на котором стоит курсор).
Но если вы вставите один подстановочный знак, то последний больше не подразумевается, и вы должны указать его явно. В самом деле, если есть файл с именем aaazzzwww
, то запись a*w
, aaazzzw
, a*z*
или a*w*
и нажатие Esc\ приведет к aaazzzwww
, но a*z
не стал бы!