🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Aprendendo Operações Básicas Comparando Fish e Bash

No desenvolvimento web, as operações de linha de comando na "tela preta", ou terminal (shell), são essenciais. Muitas pessoas provavelmente usam o shell padrão, "Bash", sem pensar muito nisso. No entanto, existem shells mais avançados que podem melhorar drasticamente nosso fluxo de trabalho. O principal exemplo, e o foco deste artigo, é o "Fish (Friendly Interactive Shell)".

Este artigo fornece uma explicação completa do uso básico e dos recursos atraentes do Fish, comparando-o com o shell mais popular, "Bash". Esperamos que este artigo sirva como um primeiro passo para os criadores da web tornarem sua vida diária de codificação mais confortável. Todo o código foi projetado para funcionar perfeitamente apenas copiando e colando. Vamos explorar o mundo do Fish acumulando pequenos sucessos de "Funcionou!"

Qual é a diferença entre Fish e Bash? Vamos aprender o básico do shell

Primeiro, vamos entender brevemente as características de cada shell.

Para usar uma analogia, se o Bash é uma "máquina veterana e confiável que requer operação manual", então o Fish é como um "assistente de IA inteligente que antecipa suas intenções и fornece suporte". Agora, vamos ver suas capacidades em ação.

【Mão na massa】É aqui que a diferença aparece! Uma comparação completa das operações básicas no Fish e no Bash

A partir daqui, experimentaremos os recursos convenientes do Fish comparando operações específicas. Se você ainda não instalou o Fish, instale-o de acordo com o seu ambiente.

Para macOS (Homebrew):

brew install fish

Para Ubuntu/Debian:

sudo apt-get update
sudo apt-get install fish

Após a instalação, você pode iniciar o shell Fish digitando `fish` em seu terminal.

1. Aparência e quantidade de informações diferentes! Comparação de prompts

A primeira coisa que você vê ao iniciar um shell é o "prompt", a parte à esquerda onde você digita os comandos. Há uma grande diferença entre o Bash e o Fish desde o início.

Um prompt típico do Bash:
Ele exibe informações como nome de usuário, nome do host e diretório atual, mas é relativamente simples.

user@hostname:~/project$ 

O prompt padrão do Fish:
O Fish exibe claramente o nome de usuário e o caminho do diretório atual. Especialmente útil é que, quando você está dentro de um repositório Git, ele exibe automaticamente o nome do branch. Para criadores da web, as operações do Git são uma rotina diária. Ver em qual branch você está trabalhando de relance é uma grande ajuda para evitar erros.

user@hostname ~/project (main)> 

2. A maior arma do Fish! Sugestões automáticas

O recurso que torna o Fish um "shell de nível divino" são suas sugestões automáticas. Este recurso prevê o comando que você provavelmente digitará a seguir com base no seu histórico de comandos, exibindo-o em uma cor cinza fraca.

Por exemplo, suponha que você já tenha digitado o comando `git commit -m "Initial commit"`. Da próxima vez, apenas digitando `git c`...

A sugestão automática do Fish:
Como você pode ver, todo o comando inferido do seu histórico é exibido fracamente após a parte que você digitou. Se você estiver satisfeito com a sugestão, basta pressionar (tecla de seta para a direita) ou Ctrl + F para aceitar o comando inteiro. Você não precisa mais digitar comandos longos repetidamente.

user@hostname ~/project (main)> git commit -m "Initial commit"

O Bash também tem um recurso de preenchimento, mas você geralmente precisa pressionar a tecla Tab para ver os candidatos, tornando-o menos contínuo e intuitivo do que o Fish. Essa experiência por si só já vale a pena mudar para o Fish.

3. Reduza drasticamente os erros de digitação! Destaque de sintaxe

O Fish informa em tempo real se o comando que você está digitando é "válido", colorindo-o. Isso é chamado de destaque de sintaxe.

Para um comando válido (por exemplo, `echo`):
Um comando válido que existe no sistema é exibido em azul claro por padrão.

echo "Hello World"

Para um comando inexistente (por exemplo, um erro de digitação como `ech`):
Se você digitar um comando incorretamente ou inserir um que não existe, ele fica vermelho instantaneamente. Isso permite que você perceba seu erro antes de executar o comando, evitando erros desnecessários.

ech "Hello World"

Graças a este recurso, você verá a familiar mensagem de erro "command not found" com muito menos frequência.

Avançado: Como a criação de scripts é diferente?

O papel de um shell não se resume a operações interativas. As diferentes filosofias do Fish e do Bash também aparecem ao escrever "scripts de shell" para automatizar uma série de processos. A criação de scripts do Fish foi projetada com uma sintaxe mais moderna e legível.

1. Definição de variável

No Bash:
Você o escreve no formato `NOME_VARIAVEL=valor`. Existe uma regra única de que você не pode ter espaços ao redor do sinal de igual.

MY_PROJECT="My Awesome Site"
echo $MY_PROJECT

No Fish:
Você usa o comando `set` para definir variáveis. Isso deixa claro o que você está fazendo e, como você passa o valor como um argumento, não precisa se preocupar com a presença de espaços.

set MY_PROJECT "My Awesome Site"
echo $MY_PROJECT

2. Instruções if (ramificação condicional)

No desenvolvimento web, a ramificação condicional como "se o arquivo `package.json` existir, execute `npm install`" é comum.

No Bash:
Uma notação um tanto arcaica usando `[` (o comando de teste) ou `[[` é comum. Palavras-chave como `; then` e `fi` também são necessárias.

if [ -f "package.json" ]; then
  echo "package.json encontrado!"
fi

No Fish:
Você pode escrevê-lo de forma mais intuitiva, como em outras linguagens de programação. Você escreve a expressão condicional diretamente após `if` e fecha o bloco com `end`. `then` e `;` são desnecessários, tornando o código mais limpo.

if test -f "package.json"
  echo "package.json encontrado!"
end

3. Loops for (iteração)

Processos iterativos, como realizar a mesma operação em vários arquivos, também são usados com frequência.

No Bash:
Você constrói um loop com uma combinação de palavras-chave como `for`, `in`, `do` e `done`.

for i in {1..3}; do
  echo "Contagem do loop Bash: $i"
done

No Fish:
Semelhante à instrução `if`, também possui uma sintaxe simples onde `do` é desnecessário e o bloco é fechado com `end`. A parte entre `()` é chamada de "substituição de comando" e trata a saída do comando como uma lista.

for i in (seq 1 3)
  echo "Contagem do loop Fish: $i"
end

Pontos a serem observados ao migrar para o Fish

Embora tenhamos mostrado o apelo do Fish, existem alguns "pontos a serem observados" ao migrar. Compreendê-los o ajudará a iniciar sua vida no Fish sem problemas e sem confusão.

1. Incompatibilidade sintática com o Bash

Como vimos, o Fish prioriza a legibilidade do script, portanto, não é totalmente compatível com o Bash. Você precisa ter um cuidado especial ao copiar e colar comandos do Bash que encontrar online.

Encadeamento de comandos (`&&`, `||`)

No Bash, você costuma usar `&&` para escrever um processo em que "se o comando anterior for bem-sucedido, execute o próximo comando".

# Crie um diretório e, se for bem-sucedido, mova-se para ele
mkdir my_dir && cd my_dir

No Fish, isso é expresso com a palavra-chave mais clara `and`. (Embora as versões recentes do Fish também possam usar `&&`, a recomendação oficial é usar `and` ou `;`)

# A maneira Fish de escrever
mkdir my_dir; and cd my_dir

Da mesma forma, `||` do Bash (execute o próximo comando se o anterior falhar) corresponde a `or` no Fish. Se você descobrir que um comando do Bash não está funcionando, lembre-se dessa diferença.

2. Como definir variáveis de ambiente

O método para definir "variáveis de ambiente", que você configura ao definir caminhos para ferramentas, também é diferente.

No Bash (escrito em `~/.bash_profile`, etc.):
Você usa o comando `export` para definir variáveis de ambiente.

export NODE_ENV="development"

No Fish (escrito em `~/.config/fish/config.fish`):
Você usa o comando `set` com a flag `-x` ou `--export`. Isso garante que a variável seja passada não apenas para o shell atual, mas também para seus processos filhos.

set -x NODE_ENV "development"

Em particular, ao adicionar um novo caminho à variável `PATH`, o Fish usa uma sintaxe um pouco especial. Como `$PATH` é tratado como uma lista (array), você pode simplesmente adicioná-lo assim:

# Adicione ~/.node_modules/bin ao início do PATH
set -x PATH ~/.node_modules/bin $PATH

Você не precisa concatená-lo como uma string com dois pontos `:` como no Bash, permitindo um gerenciamento de caminho mais seguro e intuitivo.

Conclusão: Vamos começar a usar o Fish!

Neste artigo, explicamos o uso básico e o apelo do shell de última geração, "Fish", comparando-o com o shell padrão, Bash.

Resumo dos benefícios do Fish:

Claro, o Bash tem as vantagens significativas de estar "disponível em todos os lugares" e ter uma "vasta quantidade de informações". No entanto, que tal escolher o Fish, mais amigável e poderoso, como seu "parceiro" para o trabalho diário de desenvolvimento? Especialmente para criadores da web iniciantes que desejam se acostumar com a linha de comando, o Fish deve ser o melhor parceiro de aprendizado.

Os recursos apresentados neste artigo são apenas uma fração do charme do Fish. Como próximo passo, tente personalizá-lo usando um gerenciador de plugins. Você pode torná-lo legal, adicionar recursos ainda mais convenientes e construir seu próprio ambiente de terminal definitivo.

Para o próximo artigo: Um Guia para Iniciantes sobre a Personalização do Fish com Temas (Fisher, Oh My Fish)