Como exibir todos os comandos unix disponíveis no sistema?

0

Estou lendo um livro, Learning Unix for OS X by Dave Taylor . Diz:

To quickly see all of the binary executables—Unix programs—on your system,

Open the Terminal, hold down the Shift key, and press Esc-?, or press Control-X followed by Shift-1 (using Shift-1 to get an exclamation mark).

Before the commands are displayed in the Terminal, however, you’ll first be prompted (asked) to make a choice:

$ 
Display all 1453 possibilities? (y or n)

If you press the n key on your keyboard, you’ll be taken back to a command prompt and nothing else will happen. However, if you press the y key, you’ll see a multi-column list of Unix commands stream past in the Terminal window.

No entanto, o problema é que, quando eu mantenho a tecla Shift e pressiono Esc-? , nada acontece. O mesmo para Pressionar Control-X seguido por Shift-1 . O que estou fazendo de errado? Existe alguma configuração que eu preciso ativar antes de usar esse recurso? Estou usando o iTerm2 no Mac El Capitan. Também não funciona no terminal de estoque. Qualquer ajuda seria muito apreciada. Obrigado.

    
por Yogesh Umesh Vaity 19.08.2016 / 11:49

3 respostas

4

As instruções no livro são para bash. O Zsh é um programa diferente com diferentes ligações de teclas.

No zsh, você pode ver uma lista de todos os comandos (externos, incorporados, função, alias, até mesmo palavras-chave ...) com:

type -m '*'

Apenas para seus nomes:

whence -wm '*' | sed 's/:[^:]*$//'

Ou apenas para nomes de comandos externos:

print -rlo -- $commands:t | less

$commands é uma matriz que contém todos os comandos externos. O modificador de histórico :t trunca a parte do diretório dos caminhos de comando (mantém somente o t ail). print -rlo para imprimi-los r aw em ordem alfabética o rder, um por l ine.

Mais longo, mas menos enigmático:

for p in "$path[@]"; do (cd ${p:-.} && ls); done | sort -u | less

Isso pode ser ajustado para funcionar em qualquer shell:

(IFS=:; for p in $PATH; do (cd ${p:-.} && ls); done) | sort -u | less

(Todos os comandos listados aqui assumem que não há caracteres “incomuns” nos caminhos de comando).

    
por 20.08.2016 / 03:32
2

Embora pressionar TAB duas vezes funcione como mencionado por Thomas.

Mas se isso não funcionar, tente este truque simples, mas sujo:

for i in 'echo $PATH | sed 's:\:: :g''
do
       echo $i
done

Mais tarde, você pode alterar a visualização de acordo com a necessidade / facilidade.

    
por 19.08.2016 / 12:02
0

Obrigado por responder @Gilles Eu descobri que os comandos descritos na pergunta são para bash shell.

Para usuários bash

Assim, para futuros visitantes, se você estiver usando bash shell, consulte os comandos descritos na descrição da pergunta acima para exibir todos os comandos Unix disponíveis em seu sistema.

Para usuários zsh

Se você estiver usando o shell zsh , a maneira correta de exibir todos os comandos é:

Digite ! (caractere de exclamação) e pressione a tecla Tab duas vezes.

Ou seja, pressione Shift + 1 e pressione a tecla Tab duas vezes.

Se isso não funcionar para você, consulte os truques descritos por Gilles e SHW em outras respostas.

    
por 20.08.2016 / 09:29