Terminal x Shell x Console

Olá, pessoal, boa tarde!

Acompanhando um post sobre ferramentas de terminal, vi um print de um colega aqui mostrando o seu (terminal) e perguntei como fazia pra configurá-lo daquele jeito. Ele prontamente me deu a seguinte resposta:

Aí eu descobri que sei menos do que pensava e gostaria de mais uma ajuda de vocês no seguinte:

1 - o que é um shell?

2 - O que seria um terminal e um console, então? Qual a diferença dele pra um shell? Pesquisando, vi cada um é uma coisa diferente, mas não ficou claro. Por exemplo, olha como é apresentado o ícone do meu terminal (ou shell (ou console)) na bandeja de aplicativos do meu Kubuntu:
image

3 - E o que seria um “framework” para shell/terminal/console?? Pensei que framework apenas fosse um conjunto de “ferramentas” que ajudasse para desenvolvimento web :no_mouth:

A característica do terminal (ou seja lá como for tecnicamente correto chamar) do colega e que me chamou atenção foi a representação do caminho assim:
image
Mas também tenho interesse em todos aqueles recursos interessantes que esse zsh ou Oh My Zsh fazem.

No caso, pela explicação dele, eu teria que instalar um outro aplicativo que faz o que o meu atual Konsole faz, e a partir daí configurá-lo?

2 curtidas

Você pode usar Zsh, Oh my Zsh e powerlevel10k no Konsole.

2 curtidas

Nossa olha o tanto que o Bash é poderoso em termo de chamada de sistema, o tanto de abstração é incrível. Olhe a diferença do programa escrito em Bash para o mesmo código trans-compilado para python:

#!/usr/bin/env bash

# Licença: Domínio público, faça o que quiser, a responsabilidade é sua!
# set -x

# Variáveis
salvar_texto="info_soft"
diretorio="/home/${USER}/"
read -r -p 'Digite o caminho do diretorio onde estão os executaveis: ' diretorio_binarios

# Funções
# Função para que o nome do arquivo a ser salvo não seja idêntico a um arquivo já existente no diretório
funcao_salvar() {
nome_numero=0
    while [[ -e "${diretorio}${salvar_texto}${nome_numero}.txt" ]]
    do
        ((nome_numero++))
    done
salvar_texto="${diretorio}${salvar_texto}${nome_numero}.txt"
}

# Determinar onde sera salvo o arquivo de saída
read -r -p 'Deseja alterar o local onde salvar o arquivo de texto? y/n ' sim
[[ "${sim,,}" == "y" ]] && read -r -p 'Digite o caminho do diretório onde salvar o arquivo: ' diretorio && funcao_salvar || funcao_salvar ; \
echo "Certo, será salvo em: ${salvar_texto}.txt"

# Usa o for para adicionar todo o conteudo do diretório determinado pelo usuário e pegar as informações dos mesmos com whatis e adicionar a variável
for lista in "${diretorio_binarios}"*
do
    arquivos+=$(whatis "${lista}")
done || echo "Erro, problema ao ao ler com whatis!"

# com o conteudo da variavel usa o awk para formatar e envia a saida para o arquivo detecminado pelo usuario
echo "${arquivos}" | awk -F ' - ' '!/nothing appropriate./ {print $1 ": " $2}' >>"${salvar_texto}.txt" ||
echo "Erro, problema ao gerar arquivo!"; exit "1"

O mesmo código em python:

#!/usr/bin/env python3

# Trans compilação feita pelo GPT3.5
import os
import subprocess

# Função para que o nome do arquivo a ser salvo não seja idêntico a um arquivo já existente no diretório
def funcao_salvar(diretorio, salvar_texto):
    nome_numero = 0
    while os.path.exists(f"{diretorio}{salvar_texto}{nome_numero}.txt"):
        nome_numero += 1
    return f"{diretorio}{salvar_texto}{nome_numero}.txt"

# Variáveis
salvar_texto = "info_soft"
diretorio = f"/home/{os.getlogin()}/"
diretorio_binarios = input("Digite o caminho do diretório onde estão os executáveis: ")

# Determinar onde será salvo o arquivo de saída
sim = input("Deseja alterar o local onde salvar o arquivo de texto? (y/n) ").lower()
if sim == "y":
    diretorio = input("Digite o caminho do diretório onde salvar o arquivo: ")
salvar_texto = funcao_salvar(diretorio, salvar_texto)

# Exibir o local onde o arquivo será salvo
print(f"Certo, será salvo em: {salvar_texto}")

# Adicionar todo o conteúdo do diretório determinado pelo usuário e pegar as informações dos mesmos com whatis e adicionar à variável
arquivos = ""
for lista in os.listdir(diretorio_binarios):
    info = subprocess.run(["whatis", f"{diretorio_binarios}{lista}"], capture_output=True, text=True)
    arquivos += info.stdout

# Com o conteúdo da variável, usar o awk para formatar e enviar a saída para o arquivo determinado pelo usuário
with open(salvar_texto, "a") as file:
    for line in arquivos.splitlines():
        if "nothing appropriate." not in line:
            file.write(f"{line.split(' - ')[0]}: {line.split(' - ')[1]}\n")
    else:
        print("Erro, problema ao gerar arquivo!")
        exit(1)

Eu sei que python é uma linguagem de programação para propósito geral, mas quando é chamada de sistema o Bash é muito melhor.

1 curtida

Explicação leiga sobre as suas dúvidas:

Shell: é um programa que permite ao usuário interagir com o sistema operacional por meio de comandos de texto ou de uma interface gráfica.
Exemplos:

  • bash
  • zsh
  • fish

DICA: O que muda para nós são as funcionalidades que são agregadas a elas, no baso do bash ele é mais simples, para zsh e fish alguns desenvolvedores criaram um monte de Plugins para turbinar eles.

Terminal/console: é o aplicativo que você utiliza para inserir comandos no shell.

Oh-my-fish (framework): é bem isso mesmo que você achou sobre as ferramentas da web. É um conjunto de ferramentas e plugins para “turbinar” as opções do shell em questão, neste caso é o fish. Existe o oh-my-zsh para zsh.

Lista de plugins que vem no oh-my-zsh:

Exemplo do uso de um plugin que uso (copypath):
Para você copiar o caminho da pasta que você esta atualmente, você precisa digitar o comando pwd e selecionar toda a linha do caminho e copiar com o ctrl + c, porém com o plugin ativo, basta digitar copypath (pode criar uma alias para ficar mais prático ainda) e esta feito todo este processo em apenas 1 comando.

image
Aqui entra o powerlevel10k que é um conjunto de temas para personalizar a exibição do shell (PS1)

OBS: para exibir estes ícones, se você quiser o powerlevel10k ou qualquer outra forma, terá que ter instalado NerdFonts que possui estes icones, por isso o cara citou o ttf-jetbrains-mono-nerd, que nada mais é do que a fonte jetbrains-mono + path nerdfonts seguindo o estilo da fonte.

Exemplo de temas criados:

OBS: Você pode criar o seu próprio tema do zero ou personalizar um existente.

Você pode usar o konsole com o zsh + oh-my-zsh + powerlevel10k sem problema. E customizar com a fonte que você quiser.

3 curtidas

Opa! Obrigado mais uma vez rsrs

Acabei de ver os vídeos e ficou muito mais claro!

1 curtida

Puxa, muitíssimo obrigado pelo tanto de informação e detalhes. Nada de “leiga” rs pra mim que tenho pouco conhecimento, foi muito bom, muito didático!

1 curtida

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.