Script de shell funcional

Script de shell funcional

Descobri que quando quero criar algum script de shell ou comando avançado, sempre tenho dificuldade em lembrar os nomes dos comandos e suas opções.

por exemplo

tr -d '\n' < file | wc -c

Embora em linguagens de programação eu pudesse escrever algo como

len(substituir(str(arquivo), "\n", ""))

O que é mais memorável e há menos probabilidade de pesquisar nas páginas de manual e é mais compreensível para os outros.

Então, por que o shell script está há tantos anos nesta forma enigmática? É um esforço para alterar a sintaxe para deixar claro o que o código faz sem estudar muitas páginas de manual? Existem algumas vantagens deste formulário? Como podemos lidar com as desvantagens para aproveitar ao máximo o script de shell?

Responder1

Quantas linguagens de programação você conhece que permitem abrir um arquivo para leitura, chamar uma função de biblioteca que consome o conteúdo desse arquivo, transmitir a saída dessa função para outra, retornar a saída da segunda função ao usuário, retornar um status de saída e depois limpar tudo, tudo em uma linha muito curta?

O exemplo que você dá deixa de fora muitos dos gubbins de suporte que a maioria dos idiomas precisa.

Quantas linguagens de programação possuem funções de biblioteca que aceitam números arbitrários de entradas, funcionam em vários modos e possuem uma interface simples?

printf, talvez, mas a maioria das bibliotecas acaba tendo uma grande variedade de funções com nomes e parâmetros diferentes que você precisa aprender. Eu não vejo a diferença.

Além disso, a maioria das linguagens chamaria as funções em série. Os scripts Shell os executam em paralelo e podem transmitir quantidades arbitrárias de dados através do pipeline sem consumir muita memória e (se a fonte de dados for o teclado, ou um soquete de rede, ou algo assim) tudo é feito com avaliação lenta, como e quando os dados chegam. Sua linguagem favorita faz isso?

Existem muitas linguagens que podem fazer o trabalho mais rapidamente, ou com mais eficiência, ou podem processar números com mais precisão, mas não subestime o poder do shell script!

Quanto à sintaxe? Bem, funciona. Você teria que aprender, não importa o que parecesse. O que mais você quer?

Responder2

Tentarpbs-- combinando ferramentas de linha de comando com Python -- por exemplo assim:

# sort this directory by biggest file
print sort(du(glob("*"), "-sb"), "-rn")

# print the number of folders and files in /etc
print wc(ls("/etc", "-1"), "-l")

informação relacionada