Como saber quantas linhas de código existem para um shell CLI, sem contar as linhas vazias?
O objetivo desta questão é aprender como eu poderia contar as linhas de código para ambos sh
e Bash
shells CLI.
Dado que o kernel tem cerca de 15 milhões de linhas de código, fiquei surpreso com a magnitude das linhas de código para esses 2 programas, permitindo-me interagir com o kernel.
Responder1
Para a versão mais recente dofesta, ou seja, bash v4.4, a resposta é 134576. O comando que uso é
find . -name '*.[ch]' | xargs grep -v '^\s*$' | wc -l
find . -name '*.[ch]'
significa encontrar arquivos que terminam com .c
ou .h
(sem contar os arquivos .def
, .po
embora eu ache que também faz parte do código-fonte)
in, grep -v '^\s*$'
(nota histórica, mude a forma [\s*] para \s*),
-v
imprime apenas as linhas que fazemnãocorresponder^
significa início de linha$
significa fim da linha\s
significa espaços em branco, incluindo espaço, tabulação, avanço de linha
portanto, grep -v '^[\s]*$'
exclui linhas com apenas espaços em branco e wc -l
os conta.
Existem muitosehcódigos-fonte, para UNIX v6 sh(https://etsh.io/history/sh.c). Existem apenas 860 linhas.
Responder2
Se bem entendi, então seu amigo é o comando wc.
# cat example
passwd
group
# wc -l example
3 example
# grep -v "^$" example | wc -l
2
Ou apenas com grep:
# grep -c . example
2
Se houver vários arquivos. Por exemplo, com o código-fonte do bash.
# wget -c https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
# tar xfvz bash-4.4.tar.gz
# grep -R -c . bash-4.4/ | awk -F : '{sum += $2} END {print sum}'