Sinal de porcentagem (%) na frente do comando do shell

9

Acabei de colar um monte de código no meu shell, mas esqueci de remover a liderança %antes de executar o comando. Parece não ter feito nada. Por que isso não faz nada no meu shell ( zsh )?

> % echo foo

No bash , recebo o seguinte

> % echo foo
bash: fg: %: no such job

Eu só quero ter certeza de que executar meu comando não teve algum efeito colateral.

Dave
fonte

Respostas:

9

%refere-se a um 'jobid' que é usado como parte dos recursos de "controle de trabalho e controle de processo" do zsh. Para citar o guia do usuário:

'fg' is the default operation on jobs referred to with the '%' notation,
so just typing '%1' with no command name would have worked, too.

Exemplo:

$> man zshall &
[1]  + 31392 suspended (tty output)  man zshall
$> jobs
[1]  + suspended (tty output)  man zshall
$> %
<manpage-opens-for-zshall>

Leia mais sobre isso aqui: http://zsh.sourceforge.net/Guide/zshguide03.html#l39

Para responder à sua pergunta real : Se o seu zsh não colocar um aviso lá ("fg: no job atual" ou algo parecido), haverá / foi um job. Exemplo:

$> sleep 60 &
$> % echo foo
[1]  + 411 running    sleep 60
fg: job not found: echo

A %acabou de voltar o processo de fundo e executa-lo. Após 60 segundos, obteve o próximo 'jobid' que não foi encontrado.

Assim: O comportamento que você experimentou é um pouco estranho. Sem o seu zshrc completo, é difícil dizer exatamente o que está acontecendo. Parece que você conseguiu dizer ao seu zsh que o '%' char está iniciando um comentário. Gostaria de verificar o histcharsparâmetro para o seu 3º valor:

$> echo $histchars
akira
fonte
Brilhante, obrigado. Consegui replicar seus testes e colocar em primeiro plano um trabalho em execução %. Boa captura $histcharstambém, mas o meu é um sinal de hash ( !^#). Suponho que a resposta para o meu caso em particular é que houve alguns processos em segundo plano se comportando estranhamente no zsh. Mais uma vez obrigado pela lição do shell!
Dave