Você pode fazer isso com uma função:
$ cdls() { cd "$@" && ls; }
O &&
meio ' cd
para um diretório e, se for bem-sucedido (por exemplo, o diretório existe), execute ls
'. Usar o &&
operador é melhor do que usar um ;
operador de ponto e vírgula entre os dois comandos, como acontece com { cd "$@" ; ls; }
. Este segundo comando será executado ls
independentemente de ter cd
funcionado ou não. Se cd
falhar, ls
imprimirá o conteúdo do diretório atual, o que será confuso para o usuário. Como prática recomendada, use &&
e não ;
.
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
Em geral, é uma má prática renomear um comando que já existe, especialmente para um comando comumente chamado como cd
. Em vez disso, crie um novo comando com um nome diferente. Se você sobrescrever cd
uma função ou apelido também nomeado cd
, o que aconteceria quando você inserisse um diretório com 100.000 arquivos? Existem muitos utilitários que usam cd
e podem ficar confusos com esse comportamento incomum. Se você usar uma conta compartilhada (como root
quando estiver trabalhando com outros administradores de sistema), pode ser muito perigoso substituir um comando existente porque o ambiente é diferente do que as pessoas esperam.
pwd
. Não tenho certeza se essa é uma prática recomendada, mas geralmente é feita. Veja tldp.org/LDP/abs/html/aliases.html para alguns exemplos.cd() { builtin cd "$@" && pwd; };
- usando o shell bourne padrão no macOS (Sierra 10.12.6)Eu tenho isso no meu .bashrc, e funciona bem.
Anteriormente, no meu .bashrc, tenho:,
[ -z "$PS1" ] && return
e tudo o que se segue a essa linha se aplica apenas a sessões interativas, portanto, isso não afeta ocd
comportamento dos scripts.fonte
[ -z "$PS1" ] && return
?[ -z "$PS1" ]
verifica se a$PS
(variável de prompt interativo) é "comprimento zero" (-z). Se o comprimento for zero, significa que não foi definido; portanto, o Bash não deve estar em execução no modo interativo. A&& return
peça sai do fornecimento.bashrc
neste momento, nessas condições.i
em"$-"
:case "$-" in *i*) ;; *) return ;; esac
.PS1
variável pode estar desconfigurada ou vazia e o shell ainda pode ser interativo (mas sem aviso). Eu verificaria$-
para ter certeza.off-topic, uma vez que a pergunta está marcada / bash, mas como algumas perguntas são fechadas como duplicadas desta que não menciona o bash:
Com zsh:
A função chpwd () é chamada pelo zsh sempre que o diretório atual é alterado (por meio de cd, pushd, popd ...). O tcsh possui um recurso semelhante e provavelmente é de onde o zsh o obteve.
fonte
Por que não adicionar um alias ao seu arquivo .bashrc?
Algo como:
fonte
A solução comum de criar um alias para o comando cd não é perfeita, porque existem outros comandos que podem alterar seu diretório atual, como popd, ou mesmo executar um script com o comando cd.
É melhor usar o gancho Bash $ PROMPT_COMMAND que executa um comando antes de retornar um prompt.
O comando (uma função no nosso caso) executará ls apenas se o diretório tiver sido alterado para reduzir o ruído da tela. Código para .bashrc:
fonte
Copie isto:
Agora você pode fazer um cd simples:
fonte
No bash, você não pode recorrer a aliases para ações que requerem parâmetro. Para isso, existem funções. Então coloque no seu
~/.bashrc
o seguintefonte
cd "$1" && ls
seria melhor.function mycd { builtin cd "$1" && ls "$2" }
.Coloque o código abaixo no .profile e ele funciona. Testado na caixa HP-Unix.
fonte
Ainda mais útil - com capacidade de voltar à história :
Quando você altera o diretório, uma linha com:
Stack: (current_dir) (previous_dir) ...
será mostrada e depois als
saída. Para voltar no dirs história apenas pop este comando:popd
.Eu adicionei
else
para que você veja um erro ao tentar ir para um diretório errado.fonte
Eu acho que é bom habilitar
ls
as opções dessa maneira, poiscd
não tem opção.fonte
cd
aceita opções.Aqui está o que eu acho útil (no Debian 9):
Isso me dá uma saída truncada com reticências, caso haja muitos itens nesse diretório, para que o console permaneça limpo:
fonte
fonte