Я нахожу, что я часто делаю следующее:
%> cd bla/bla
%> ls
Я хотел бы, чтобы всякий раз, когда я cd
в каталог, он автоматически делал ls
.
Некоторое время я возился с моим .bashrc
, но не мог понять, как это сделать.
источник
Я нахожу, что я часто делаю следующее:
%> cd bla/bla
%> ls
Я хотел бы, чтобы всякий раз, когда я cd
в каталог, он автоматически делал ls
.
Некоторое время я возился с моим .bashrc
, но не мог понять, как это сделать.
Вы можете сделать это с помощью функции:
$ cdls() { cd "$@" && ls; }
В &&
означает « cd
в директории, и в случае успеха (например , каталог существует), запуск ls
». Использование &&
оператора лучше, чем использование точки с запятой ;
между двумя командами, как с { cd "$@" ; ls; }
. Эта вторая команда будет выполняться ls
независимо от того, cd
сработало или нет. Если произошел cd
сбой, ls
будет напечатано содержимое вашего текущего каталога, что будет сбивать с толку пользователя. В качестве лучшей практики используйте &&
и нет ;
.
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
Как правило, плохая практика - переименовывать команду, которая уже существует, особенно для обычно называемой команды, такой как cd
. Вместо этого создайте новую команду с другим именем. Если вы перезаписываете cd
функцию или псевдоним, который также называется cd
, что произойдет, если вы введете каталог с 100 000 файлов? Есть много утилит, которые используют cd
, и они могут запутаться из-за этого необычного поведения. Если вы используете общую учетную запись (например, root
когда вы работаете с другими системными администраторами), замена существующей команды может быть очень опасной, поскольку среда отличается от ожидаемой.
pwd
. Не уверен, что это лучшая практика, но обычно это делается. См. Tldp.org/LDP/abs/html/aliases.html для некоторых примеров.cd() { builtin cd "$@" && pwd; };
- с использованием стандартной оболочки Bourne на macOS (Sierra 10.12.6)У меня есть это в моем .bashrc, и он отлично работает.
Ранее в моем .bashrc я имел:,
[ -z "$PS1" ] && return
и все после этой строки относится только к интерактивным сессиям, так что это не влияет наcd
поведение скриптов.источник
[ -z "$PS1" ] && return
?[ -z "$PS1" ]
проверяет, является ли$PS
(переменная интерактивного приглашения) «нулевой длиной» (-z). Если это нулевая длина, это означает, что он не был установлен, поэтому Bash не должен работать в интерактивном режиме. На этом этапе, в этих условиях,&& return
деталь выходит из источника.bashrc
.i
в"$-"
:case "$-" in *i*) ;; *) return ;; esac
.PS1
Переменная может быть неустановленной или пустой, а оболочка все еще может быть интерактивной (но без подсказки). Я бы проверил,$-
чтобы убедиться.не по теме, так как вопрос помечен / bash, но поскольку некоторые вопросы закрыты как дубликат этого вопроса, в котором не упоминается bash:
С зш:
Функция chpwd () вызывается zsh при каждом изменении текущего каталога (посредством cd, pushd, popd ...). У tcsh есть похожая особенность, и, вероятно, откуда zsh его получил.
источник
Почему бы не добавить псевдоним в ваш файл .bashrc?
Что-то вроде:
источник
Общее решение создания псевдонима для команды cd не является идеальным, потому что есть другие команды, которые могут изменить ваш текущий каталог, например popd, или даже запустить скрипт с командой cd в нем.
Лучше использовать перехват $ PROMPT_COMMAND, который выполняет команду перед возвратом приглашения.
Команда (в нашем случае это функция) будет выполнять ls, только если каталог был изменен, чтобы уменьшить шум на экране. Код для .bashrc:
источник
Скопируйте это:
Теперь вы можете сделать простой CD:
источник
В bash вы не можете использовать псевдонимы для действий, для которых требуется параметр. Для этого есть функции. Так что вставьте в ваш
~/.bashrc
следующийисточник
cd "$1" && ls
было бы лучше.function mycd { builtin cd "$1" && ls "$2" }
.Поместите приведенный ниже код в .profile, и он работает. Протестировано на HP-Unix box.
источник
Еще удобнее - с возможностью вернуться в историю :
Когда вы меняете каталог,
Stack: (current_dir) (previous_dir) ...
будет показана строка с:, затемls
вывод. Чтобы вернуться в истории директорий просто попы этой команды:popd
.Я добавил,
else
чтобы вы увидели ошибку при попытке перейти в неправильный каталог.источник
Я думаю, что это хорошо, чтобы включить
ls
параметры таким образом, поскольку неcd
принимает никаких вариантов.источник
cd
действительно принимает варианты.Вот что я считаю полезным (в Debian 9):
Это дает мне усеченный вывод с многоточием на случай, если в этом каталоге слишком много элементов, поэтому консоль остается чистой:
источник
источник