# Qual shell você usa?

## Operador Nabla

A maioria das distribuições GNU/Linux (principalmente as mais populares) vêm configuradas para utilizar o bash como shell padrão. Mas, de uns tempos pra cá, encontrei algumas iniciativas corajosas de uso de outras shells como padrão (como o GoboLinux, que usa zsh e eu mesmo, aqui na faculdade, que uso Debian com tcsh como shell padrão). É possível até mesmo configurar o interpretador LISP clisp como shell de login...

Então resolvi lançar esta enquete para saber qual shell o pessoal daqui costuma usar (meu interesse oculto: saber quem daqui não usa bash  :Twisted Evil:  ).

PS: A última opção não foi colocada -> "outra (qual?)"

----------

## leandro

Eu sempre usei bash.. mas já faz um tempo que estou interessado em testar outros. 

Seria legal o pessoal explicar porque usam outras shells, quais as vantagens, etc.  :Smile: 

----------

## fernandotcl

Eu gostei do zsh. A compleção do tab ajuda na hora de diretórios que não estejam em minúsuculas.

----------

## fernandotcl

Diferenças entre shells aqui.

Em resumo:

```
                                     sh   csh  ksh  bash tcsh zsh  rc   es

Job control                          N    Y    Y    Y    Y    Y    N    N

Aliases                              N    Y    Y    Y    Y    Y    N    N

Shell functions                      Y(1) N    Y    Y    N    Y    Y    Y

"Sensible" Input/Output redirection  Y    N    Y    Y    N    Y    Y    Y

Directory stack                      N    Y    Y    Y    Y    Y    F    F

Command history                      N    Y    Y    Y    Y    Y    L    L

Command line editing                 N    N    Y    Y    Y    Y    L    L

Vi Command line editing              N    N    Y    Y    Y(3) Y    L    L

Emacs Command line editing           N    N    Y    Y    Y    Y    L    L

Rebindable Command line editing      N    N    N    Y    Y    Y    L    L

User name look up                    N    Y    Y    Y    Y    Y    L    L

Login/Logout watching                N    N    N    N    Y    Y    F    F

Filename completion                  N    Y(1) Y    Y    Y    Y    L    L

Username completion                  N    Y(2) Y    Y    Y    Y    L    L

Hostname completion                  N    Y(2) Y    Y    Y    Y    L    L

History completion                   N    N    N    Y    Y    Y    L    L

Fully programmable Completion        N    N    N    N    Y    Y    N    N

Mh Mailbox completion                N    N    N    N(4) N(6) N(6) N    N

Co Processes                         N    N    Y    N    N    Y    N    N

Builtin artithmetic evaluation       N    Y    Y    Y    Y    Y    N    N

Can follow symbolic links invisibly  N    N    Y    Y    Y    Y    N    N

Periodic command execution           N    N    N    N    Y    Y    N    N

Custom Prompt (easily)               N    N    Y    Y    Y    Y    Y    Y

Sun Keyboard Hack                    N    N    N    N    N    Y    N    N

Spelling Correction                  N    N    N    N    Y    Y    N    N

Process Substitution                 N    N    N    Y(2) N    Y    Y    Y

Underlying Syntax                    sh   csh  sh   sh   csh  sh   rc   rc

Freely Available                     N    N    N(5) Y    Y    Y    Y    Y

Checks Mailbox                       N    Y    Y    Y    Y    Y    F    F

Tty Sanity Checking                  N    N    N    N    Y    Y    N    N

Can cope with large argument lists   Y    N    Y    Y    Y    Y    Y    Y

Has non-interactive startup file     N    Y    Y(7) Y(7) Y    Y    N    N

Has non-login startup file           N    Y    Y(7) Y    Y    Y    N    N

Can avoid user startup files         N    Y    N    Y    N    Y    Y    Y

Can specify startup file             N    N    Y    Y    N    N    N    N

Low level command redefinition       N    N    N    N    N    N    N    Y

Has anonymous functions              N    N    N    N    N    N    Y    Y

List Variables                       N    Y    Y    N    Y    Y    Y    Y

Full signal trap handling            Y    N    Y    Y    N    Y    Y    Y

File no clobber ability              N    Y    Y    Y    Y    Y    N    F

Local variables                      N    N    Y    Y    N    Y    Y    Y

Lexically scoped variables           N    N    N    N    N    N    N    Y

Exceptions                           N    N    N    N    N    N    N    Y
```

----------

## Operador Nabla

Um recurso interessante da tcsh é que, se você erra alguma coisinha na digitação do comando, a shell avalia o que você digitou e sugere um comando correto que ele julgar mais próximo daquilo que você digitou, ou permite que você re-edite o comando (não sei se outras shell's fazem o mesmo).

----------

## AngusYoung

Eu uso Bash  :Smile: 

----------

## nafre

Eu prefiro a bash.

Faz maior tempo que nao posto nada!

----------

## Enderson

Uso bash por que já tá lá, hehe!

Nunca pensei em mudar, mas qq dia desse eu testo outro.

----------

## jbrazio

Não se esqueceram da sh na poll ?

Se bem que no gentoo ela está com uma symbolic link para a bash..

----------

## leandro

 *jbrazio wrote:*   

> Não se esqueceram da sh na poll ?
> 
> Se bem que no gentoo ela está com uma symbolic link para a bash..

 

você usa?  :Smile: 

----------

## jbrazio

 *leandro wrote:*   

>  *jbrazio wrote:*   Não se esqueceram da sh na poll ?
> 
> Se bem que no gentoo ela está com uma symbolic link para a bash.. 
> 
> você usa? :)

 

Bash.. mas sim uso num cdrom de recuperação que fiz. :-)

----------

## NatuNobilis

Uso o bash porque é o padrão, mas já testei outras há muito tempo (no Conectiva 5.0).

Uma dúvida: Um amigo meu fez um curso de UNIX, onde falaram pra ele que o bash é a única shell que permite o uso de várias cores. Isso é verdade?

Se não for verdade, vou testar o zsh agora, porque os desenvolvedores do GoboLinux foram muuuuito enfáticos nas vantagens do zsh sobre o bash.

Grande abraço, e adorei a enquete.

NatuNobilis

----------

## fernandotcl

 *NatuNobilis wrote:*   

> Uma dúvida: Um amigo meu fez um curso de UNIX, onde falaram pra ele que o bash é a única shell que permite o uso de várias cores. Isso é verdade?
> 
> Se não for verdade, vou testar o zsh agora, porque os desenvolvedores do GoboLinux foram muuuuito enfáticos nas vantagens do zsh sobre o bash.

 

Pode começar o "emerge zsh" então...  :Wink: 

Me parece que o zsh tem outros caracteres de escape para cores, mas tem cores sim. Inclusive o GoboLinux usa intensivamente essas cores.

----------

## Hal[PT]

```
server[hal9000]~> ks                                                      00:35

zsh: correct 'ks' to 'ls' [nyae]?
```

```
server[hal9000]~> cd st                                                   00:35

local directory

stuff/

directory in cdpath

starrysky/

user

starrysky
```

```
server[hal9000]~> emerge --buildpkg                                       00:35

option

--buildpkg      -- Tells emerge to build binary packages

--buildpkgonly  -- Tells emerge to only build binary packages

--changelog     -- This will show the ChangeLog

...

```

```
server[hal9000]~> man StrMatch                                            00:35

manual page

StrMatch     strcspn      string.h     strndupa     strtod       strtoull

StrictMotif  strdup       strings      strnlen      strtof       strtoumax

```

É pena n veres, mas o "server" é verde, o "hal9000" é azul e as horas (sempre do lado direito do terminal) são vermelhas. As várias secções de completion são separadas pelos indicadores a bold (só para desmistificar as cores).

De facto zsh só não faz o pino. Isto inclui tanta feature, desde edição da command line vim-style até pesquisas na history tipo

```
server[hal9000]~> emerge -s alskdjaskldjla                                00:40

bck-i-search: alsk_
```

... que pronto... dá para tudo... (lol)

----------

## Operador Nabla

Se vocês estão se referindo àquelas seqüências de escape ANSI para colorir o texto do console, mover o cursor, etc., creio que o suporte a estas seqüências não depende a shell que você usa, mas sim do programa de terminal, haja vista que você pode passar estas seqüências até mesmo pelos seus programinhas em C, Java, ou qualquer outra linguagem.

Eu estava lendo algumas manpages da zsh e descobri que ela traz recursos interessantes comuns ä bash (por exemplo, sintaxe dos zsh scripts muito semelhante à dos bash scritps) e à tcsh (por exemplo, as strings de customização do prompt de comando). Para quem já curte bash ou tcsh, creio que vale a pena começar a explorar a zsh...

----------

## fernandotcl

É uma pena não ser possível remover o bash completamente do Gentoo sem quebrar o Portage...

----------

## Operador Nabla

 *fernandotcl wrote:*   

> É uma pena não ser possível remover o bash completamente do Gentoo sem quebrar o Portage...

 

Não precisamos ser tão drásticos. Todas estas shells podem coexistir numa boa. Mais do que isso, você pode continuar escrevendo scripts para todas elas. O que importa é qual delas você quer usar como shell de login.

Aliás, não sei se temos muitos LISPers por aqui, mas se tiver, que tal tentar configurar o clisp como uma shell de login? É possível encontrar um pequeno "how-to" no site do projeto.

----------

## fernandotcl

 *Operador Nabla wrote:*   

>  *fernandotcl wrote:*   É uma pena não ser possível remover o bash completamente do Gentoo sem quebrar o Portage... 
> 
> Não precisamos ser tão drásticos. Todas estas shells podem coexistir numa boa. Mais do que isso, você pode continuar escrevendo scripts para todas elas. O que importa é qual delas você quer usar como shell de login.

 

Eu acho que excedi o limite anti-bloat.  :Wink:  Ok, no 2004.1 vou instalar o zsh junto com o bash...

 *Operador Nabla wrote:*   

> Aliás, não sei se temos muitos LISPers por aqui, mas se tiver, que tal tentar configurar o clisp como uma shell de login? É possível encontrar um pequeno "how-to" no site do projeto.

 

Isso é ser drástico.  :Very Happy: 

----------

## NatuNobilis

 *fernandotcl wrote:*   

>  *NatuNobilis wrote:*   Uma dúvida: Um amigo meu fez um curso de UNIX, onde falaram pra ele que o bash é a única shell que permite o uso de várias cores. Isso é verdade?
> 
> Se não for verdade, vou testar o zsh agora, porque os desenvolvedores do GoboLinux foram muuuuito enfáticos nas vantagens do zsh sobre o bash. 
> 
> Pode começar o "emerge zsh" então... 
> ...

 

"Emergindo" agora mesmo!  :Very Happy: 

Quer dizer que aquela configuração da variável PS1 que vem no /etc/profile não vai funcionar no zsh? Vai ficar tudo cheio de lixo? Ou simplesmente não vai ficar colorido?

Não entendo quase nada de shellscript.  :Sad: 

Grande abraço,

NatuNobilis

----------

## fernandotcl

 *NatuNobilis wrote:*   

> "Emergindo" agora mesmo! 
> 
> Quer dizer que aquela configuração da variável PS1 que vem no /etc/profile não vai funcionar no zsh? Vai ficar tudo cheio de lixo? Ou simplesmente não vai ficar colorido?

 

Isso eu não sei... À propósito, nem tenho certeza de que não existe interoperabilidade. Eu acho que somente os escape codes são diferentes, mas não tenho certeza. Talvez exista compatibilidade, pois aplicações como "ls" funcionam nos dois e colorido.

 *NatuNobilis wrote:*   

> Não entendo quase nada de shellscript. 

 

Eu também não tenho pressa de aprender.  :Very Happy:  Linguagem extremamente rígida, justamente por sua natureza. Parto do princípio de que se algo não precisa ser feito em bash (não conheço derivados do csh, não posso opinar), não deve ser feito (apesar de que o zsh parece ter algumas inovações).

----------

## NatuNobilis

"Emergi".  :Cool: 

Maravilha. Já estou bastante apaixonado pelo zsh.  :Laughing: 

Mas as escape codes do bicho são totalmente diferentes.

Logo depois de instalar, fui no bash e dei um zsh

O prompt veio todo errado. Os escape codes do bash apareceram como caracteres normais, e tudo ficou horroroso.

Pra consertar, fui nessa página e nessa aqui.

O legal é que eu consegui deixar o prompt do zsh igualzinho ao que eu tinha feito pro bash, e sem muito esforço, graças a esses links.

Então, caso interesse a alguém, vou postar aqui meu PS1 do bash e o PS1 do zsh, com aparência idêntica:

bash:

export PS1='\[\033[01;33m\]\t \[\033[01;32m\]\u@\h \[\033[01;34m\]\w \$ \[\033[00m\]'

zsh:

export PS1="$(print '%{\e[1;33m%}%*%{\e[0m%}') $(print '%{\e[1;32m%}%n@%m%{\e[0m%}') $(print '%{\e[1;34m%}%~ $%{\e[0m%}') "

Resultado final em ambos:

21:17:43 pablo@valinor ~ #

Abraço,

NatuNobilis

----------

## r3pek

bash here  :Very Happy:  sempre usei bash....

----------

## Operador Nabla

Para converter uma "escape string" de prompt do bash para tcsh ou zsh, basta trocar os \[s e \]s por %{s e %}s, respectivamente.

De um modo geral, para cada \<alguma-coisa> do bash, tem um %<outra-coisa> correspondente no tcsh ou zsh. Basta ler algumas manpages para descobrir as correspondências.

Aliás, as variáveis de customização do prompt do zsh não são prompt, prompt1, etc.? No tcsh, pelo menos, são estas.

----------

## NatuNobilis

 *Operador Nabla wrote:*   

> Aliás, as variáveis de customização do prompt do zsh não são prompt, prompt1, etc.? No tcsh, pelo menos, são estas.

 

Estou usando a variável PS1 como falei acima, e tudo funciona perfeitamente.

E segundo algum link que eu li, não basta trocar os \[ e \] não. Isso é porque no zsh você deve incluir o comando print para que ele retorne o valor da seqüência que vai dar a cor à string em questão.

Mas não cheguei a testar a simples substituição.

Um abraço,

NatuNobilis

----------

## To

/me loves bash  :Wink: 

Tó

----------

## Operador Nabla

 *NatuNobilis wrote:*   

>  *Operador Nabla wrote:*   Aliás, as variáveis de customização do prompt do zsh não são prompt, prompt1, etc.? No tcsh, pelo menos, são estas. 
> 
> Estou usando a variável PS1 como falei acima, e tudo funciona perfeitamente.

 

Engraçado. Aqui com o meu Gobo, a variável usada é a prompt. Será que a zsh trabalha com as duas formas?

 *NatuNobilis wrote:*   

> E segundo algum link que eu li, não basta trocar os \[ e \] não. Isso é porque no zsh você deve incluir o comando print para que ele retorne o valor da seqüência que vai dar a cor à string em questão.
> 
> Mas não cheguei a testar a simples substituição.

 

Também não me recordo de a minha variável de prompt precisar invocar o comando print. Vou ler umas manpages quando chegar à minha casa e ver direitinho isso.

----------

## Operador Nabla

Sobre "prompt expansion" no zsh, vale a pena ler:

http://zsh.sourceforge.net/Doc/Release/zsh_12.html#SEC40

----------

## NatuNobilis

 *Operador Nabla wrote:*   

> Sobre "prompt expansion" no zsh, vale a pena ler:
> 
> http://zsh.sourceforge.net/Doc/Release/zsh_12.html#SEC40

 

Ôpa, muito obrigado. Vou ler em breve.

Grande abraço,

NatuNobilis

----------

## Phk

/me loves bash too  :Wink: 

----------

