Posso modificar um comando do terminal para fazer coisas adicionais?


8

Eu procurei pseudônimos, funções ... mas não criei nada satisfatório. Deixe-me dar alguns cenários:

  • 95% das vezes que eu entro cdem uma pasta, sigo com um ls comando.
  • 90% das vezes que eu mkdir, eu cdmesmo nele.

Você entendeu a ideia.

Qual seria a maneira "mais limpa" de vincular esses comandos (ou outra funcionalidade)?


5
Por que aliases não funcionaram para você?
Thorbjørn Ravn Andersen

2
Então, o resultado do cd do mkdir deve seguir o sl?
bmike

Bem, um diretório recém-criado estará vazio, então ls não imprime nada.
usar o seguinte comando

@ Random832 você assume que não há sinalizadores no sl, mas o mais importante é que minha pergunta irá revelar o quão desejada é a alteração / mão pesada. Prefiro pseudônimos sobre funções, mas ambos podem tentar o que é solicitado.
bmike

1
@ fd0 Não estou duvidando que aliases não funcionaram. Estou perguntando o porquê. Pode haver uma solução mais simples para o problema.
Thorbjørn Ravn Andersen

Respostas:


4

Você pode colocar essas linhas no seu .zsrhcou.bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

Resultado ->

insira a descrição da imagem aqui

Explicação desta resposta :

No início do meu .bashrc, tenho: [-z "$ PS1"] && return, e tudo o que se segue a essa linha se aplica somente a sessões interativas, portanto isso não afeta o comportamento do CD nos scripts.

Mais informações deste comentário :

[-z "$ PS1"] verifica se o $ 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 parte de retorno && sai da fonte .bashrc neste momento, nessas condições.

Btw, obrigado pela pergunta, é muito legal :)

Editar:

Outra solução seria integrar seus sls ao prompt; Tenho certeza que você pode fazer isso com OhMyZsh;)


1
Em geral, não use o mesmo nome de comandos padrão como ls cd rm etc como você vai precisar usar esses comandos padrão
user151019

@ Mark Estou de acordo em 'rm -rf ~ / *' ^^ Mas para um comando cd, não é realmente perigoso. E Carles quer 'upgrade comandos existentes', então ...
StrawHara

Devo dizer que utilizei esta solução desde que a @StrawHara a publicou e tive 0 problemas. Eu queria fornecer o "como foi" :) E é realmente útil; é assim que eu uso (.zshrc): i.imgur.com/WHpROIE.png
Carles Alcolea

13

Eu tenderia a fazer um novo comando para isso. Eu acho que seria lógico combiná-los em um único.

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}

Eu gosto da sua ideia combinando essas! :-)
Martin Allert

5
Esta resposta é também a mais limpa, pois não definição padrão distúrbio do cd / mkdir quando usado por scripts
holroy

1
Claro, mas e se você decidir começar a usar a linguagem de programação Go? : P
arxanas

@arxanas: Você usa makefiles? ;-)
DevSolar

2
hmmm eu gosto deste. mas se você digitar o nome acidentalmente, criará um novo diretório. É difícil de implementar um cheque em uma licença (cd /.... ou ../ou algo assim) e excluir o diretório se ele está vazio? Quero dizer, se você deixar um diretório, verifique se ele está vazio e, em caso afirmativo, exclua-o. se você não quer isso, você ainda pode usar cd em vez de ir
Schwertspize

6

Eu tentei adicionar coisas como estas ao meu .bashrc:

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

No entanto, descobri que isso pode atrapalhar os scripts que usam os comandos substituídos, e a manipulação de opções pode ser frágil (por exemplo, se você deseja passar -ppara o mkdircomando acima , ele também é passado cd). Melhor seria apenas definir aliases com nomes diferentes (digamos, cou mcd).


1
inserir [ -z "$PS1" ] && returnno final do arquivo, antes de essas funções, deve ajudar
Carles Alcolea

5

Eu acho que as funções são o caminho a percorrer. Algo como

chglist() {
    cd "$1" && ls
}

como um exemplo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.