Я часто запускаю ls
команду после запуска cd
команды. Как я могу создать псевдоним (как cs
) для этой операции?
источник
Я часто запускаю ls
команду после запуска cd
команды. Как я могу создать псевдоним (как cs
) для этой операции?
Из Bash Советы и хитрости: «CD» со стилем :
Наконец, я хочу показать вам, как написать собственную замену для команды 'cd'.
Считаете ли вы себя всегда печатать одно и то же при переходе в каталог? Вы, вероятно, по крайней мере перечисляете файлы там каждый раз, возможно, настолько, что ваши руки автоматически набирают «ls» после каждого «cd».
Что ж, пытаясь всеми возможными способами, оказывается, что есть только один способ правильно достичь цели, к которой мы стремимся. Мы должны создать функцию оболочки.
Функции оболочки являются частью программирования оболочки. Как и в скомпилированных языках программирования, функции обеспечивают своего рода процедурную модульность. Можно создать универсальную функцию для выполнения часто используемой части логики или вычислений с различными параметрами. В этом случае параметр является текущим рабочим каталогом.
Вот простой:
function cs () { cd $1 ls }
Как с сожалением отмечает @geirha , приведенная выше функция завершится ошибкой, если вы попытаетесь переключиться на каталог с пробелом в его имени:
$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>
Вместо этого вы должны использовать следующую функцию:
function cs () {
cd "$@" && ls
}
Как только вы добавите этот код к себе ~/.bashrc
, вы сможете сделать это:
hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
Вы можете использовать
builtin
команду в bash:источник
function ls() { /usr/bin/ls $* }
cd
потому чтоrvm
менялось и моеcd
определение. См stackoverflow.com/a/19941991/1601989Используйте функцию вместо псевдонима:
источник
Спасибо Florian Diesch за подсказку по использованию функции. Я не могу использовать
cs
в качестве имени, потому чтоcs
в пакете csound есть команда , поэтому я использовалlc
.Я добавил это к
~/.bash_aliases
(nano ~/.bash_aliases
):Терминал должен быть
reset
для того, чтобы это вступило в силу.источник
$1
некотируемой как это будет делать это ошибкой , если каталог содержит пробела. Кроме того, вы должны проверить возвращаемое значениеcd
; если это не удалось (например, отказано в разрешении), нет смысла запускатьls
.lc() { cd "$@" && ls; }
В качестве расширения для этой функции:
cs() { cd "$1" && ls; }
вы можете передать все аргументов функции , чтобыcd
, используя$@
вместо того , чтобы"$1"
как таковой:cs() { cd $@ && ls; }
.источник
У меня были проблемы с переопределением,
cd
потому чтоrvm
меняются и моиcd
определения. См. Https://stackoverflow.com/a/19941991/1601989 . Я действительно не хотел использовать,builtin
потому что это пропустило бы то, чтоrvm
делает.Я добавил следующее к своему
.bashrc
:А затем после
rmv
строки в.bashrc
:источник