shopt: mudando as propriedades da shell em execução
O Bash possui uma série de recursos interessantes disponíveis via arquivos de configuração e parâmetros de chamada, mas alguns deles podem ser ativados e desativados sob demanda, na shell em execução (ou em um script) por meio do comando shopt.
Alguns dos recursos controláveis pelo shopt podem ser surpreendentes para você: o autocd, por exemplo, faz com que digitar o nome de um diretório passe a valer como um comando ‘cd’ para aquele diretório.
Mas vários outros controlam aspectos triviais e que podem adequar seu ambiente às suas preferências, tanto em scripts quanto em uso interativo do terminal: detalhes da expansão de nomes de arquivos (o funcionamento do asterisco, por exemplo), da gravação do histórico de comandos, da criação do prompt e mais. O artigo a seguir explica como usar o shopt para ativá-los, desativá-los e consultá-los. (via linuxnix.com – “Change shell properties with Linux shopt command”)
Leia também: sudo bang bang: um atalho rápido para redigitar menos no Terminal, no BR-Mac.org.
Muito bom, gosto muito do bash.
quem mais leu ShopTo?
Mais um item em que o zsh deixa o bash comendo poeira… É verdade, opções demais podem confundir ao invés de agregar, mas na minha experiência mesmo as mais obscuras que o zsh oferece são muito necessárias em certos cenários – muitas delas são de compatibilidade. Obviamente, o zsh tem todas as opções do bash e até as teve antes dele.
No bash:
No zsh:
(OBS.: pra ver todas as opções e seus valores no zsh, se alguém se interessar:
Mais artigos legais sobre o porquê do zsh ser muito, muito melhor que o bash: LinuxGazette Parte 1 e Parte 2. Curtos e bem explicados.
Infelizmente com os divulgadores nacionais de shell script ignorando e até desprezando o zsh – e falo de nomes como o Aurélio e Júlio Neves sim – temos pouca gente motivada a usá-lo e aprender com ele, que é muito melhor que o bash tanto para uso interativo quanto para programação pesada. Toda vez que eu vejo alguém falando bem de bash eu, usuário de zsh há anos, sinto a mesma “dor de cotovelo” que alguém que conhece bastante Python sente ao ver o povo falando bem de perl ou Java.
Lembrando que o zsh teve a versão 5.0 liberada recentemente e eu compilei os pacotes deb para Ubuntu 32 e 64 bits e ofereci aqui. Também consegui compilar pacotes para RHEL6.0 64 bits. Estou testando já há algum tempo e está ótimo.
Ah, e no bash, você escreve o “sudo !!” e aperta e nada, tem que apertar confiando que vá funcionar. No zsh, você escreve “sudo !!” e aperta e ele substitui o “!!” pelo último comando. É um jeito muito mais fácil de decorar o enigmático comportamento do “!” – vendo em tempo real! – e já faz parte da minha digitação diária — por exemplo, “cp /dir1/dir2/dir3/dir4/dir5/dir6/arq.txt !$.old” me pouca muita digitação e ainda vejo o comando resultante na tela, na hora, aí nunca me confundo entre por exemplo !# e !$.
Porcaria… minhas < > foram confundidas com HTML! Reiterando:
Ah, e no bash, você escreve o “sudo !!” e aperta [TAB] e nada, tem que apertar [ENTER] confiando que vá funcionar. No zsh, você escreve “sudo !!” e aperta [TAB] e ele substitui o “!!” pelo último comando. É um jeito muito mais fácil de decorar o enigmático comportamento do “!” – vendo em tempo real! – e já faz parte da minha digitação diária — por exemplo, “cp /dir1/dir2/dir3/dir4/dir5/dir6/arq.txt !$[TAB].old” me poupa muita digitação e ainda vejo o comando resultante na tela, na hora, aí nunca me confundo entre por exemplo !# e !$.
Ah… e quem tiver um N9 e quiser.. Fiz um pacote .deb do zsh 5.0 pra ele também. :P
Querido patola,
Me tira uma duvida:
Ecziste alguma distro em que o zsh seja o padrao no lugar do bash? Eh possivel colocar zsh como padrao do usuario root de boa ??
Abracos
henry, se existe uma distribuição com o zsh como default eu não sei. Pode ser que haja algum BSD, dada sua afinidade maior com o zsh (licença e origem), mas realmente desconheço. É possível colocar zsh como o shell do root sim (eu faço isso há anos tanto no Ubuntu quando no Redhat) basicamente porque mesmo que haja incompatibilidades entre os shells, o she-bang no começo dos scripts (#!/bin/bash, #!/bin/zsh) garante que o shell correto seja executado para aquela tarefa.
A distro Grml: http://grml.org/features/
E recentemente, o Arch colocou o zsh como shell padrão do livecd: http://www.archlinux.org/news/install-media-20120804-available/