Existe uma linha que listará todos os executáveis de $ PATH no bash.
bash
shell
path
executable
jcubic
fonte
fonte
in
,{
...) e aliases.Com zsh:
Ou:
(observe que, para comandos que aparecem em mais de um componente
$PATH
, eles listarão apenas o primeiro).Se você deseja os comandos sem os caminhos completos e classificados por uma boa medida:
(ou seja, obtenha as chaves dessa matriz associativa em vez dos valores).
fonte
Em qualquer shell POSIX, sem usar nenhum comando externo (assumindo que
printf
está embutido, se não voltar aecho
), exceto pela classificação final e assumindo que nenhum nome executável contém uma nova linha:Se você não possui nenhum componente vazio
$PATH
(use em.
vez disso), nem componentes iniciados com-
, nem caracteres curinga\[?*
nos componentes PATH ou nos nomes de executáveis, nem nos executáveis iniciados com.
, você pode simplificar isso para:Usando POSIX
find
esed
:Se você deseja listar o arquivo não-executável raro ou o arquivo não-regular no caminho, há uma maneira muito mais simples:
Isso pula arquivos de ponto; se você precisar deles, adicione o
-A
sinalizadorls
se o seu tiver ou se você deseja manter o POSIX:ls -aH $PATH | grep -Fxv -e . -e ..
Existem soluções mais simples no bash e no zsh .
fonte
$PATH
está definido e não contém componentes vazios e que esses componentes não parecem encontrar predicados (ou opções ls). Alguns deles também ignoram arquivos de ponto.yash
ezsh
em emulação sh).find
.-prune
impedirá a listagem de diretórios. Você provavelmente deseja, em-L
vez de-H
incluir links simbólicos (comuns para executáveis).-perm -100
não garante que o arquivo seja executável por você (e pode (improvável) excluir arquivos executáveis).Eu vim com isso:
EDIT : Parece que este é o único comando que não aciona o alerta SELinux ao ler alguns dos arquivos no diretório bin pelo usuário apache.
fonte
for
?IFS=:; find $PATH -maxdepth 1 -executable -type f -printf '%f\n'
$PATH
está definido e não contém caracteres curinga e não contém componentes vazios. Isso também assume a implementação GNU defind
.-type f
vez de (específico do GNU)-xtype f
, isso também omitirá links simbólicos. Isso também não listará o conteúdo dos$PATH
componentes que são links simbólicos.Que tal agora
A substituição de cadeia é usada com o Bash.
fonte
$PATH
está definido, não contém caracteres curinga ou caracteres em branco, não contém componentes vazios. Isso pressupõe que o GNU encontre também. Observe que${var//x/y}
é umaksh
sintaxe (também suportada pelo zsh e bash). A rigor, também assume que os componentes $ PATH também não sãofind
predicados.$PATH
componentes não sejam links simbólicos.IFS=:
é mais robusta do que fazer essa substituição. Caminhos com espaços não são tão incomuns no Windows. Links simbólicos são bastante comuns, mas isso é facilmente resolvido-H
.Se você pode executar o python no seu shell, o seguinte (ridiculamente longo) one-liner também pode ser usado:
Este foi principalmente um exercício divertido para mim, para ver se poderia ser feito usando uma linha de código python sem recorrer ao uso da função 'exec'. De uma forma mais legível e com alguns comentários, o código fica assim:
fonte
fonte