A parte completa da página do manual do Bash aplicável apenas diz:
Se o sistema operacional no qual o bash estiver em execução suportar o controle de tarefas, o bash conterá recursos para usá-lo. Digitar o caractere de suspensão (normalmente ^ Z, Control-Z) enquanto um processo está em execução faz com que esse processo seja parado e retorna o controle ao bash. Digitar o caractere de suspensão atrasada (normalmente ^ Y, Control-Y) faz com que o processo seja interrompido quando ele tenta ler a entrada do terminal e o controle retornado ao bash. O usuário pode então manipular o estado desse trabalho, usando o
bg
comando para continuar em segundo plano, ofg
comando para continuar em primeiro plano ou o comando kill para matá-lo. A ^ Z entra em vigor imediatamente e tem o efeito colateral adicional de fazer com que a saída pendente e o cabeçote de impressão sejam descartados.
Eu nunca usei Ctrl- Y; Eu apenas aprendi sobre isso. Eu tenho feito muito bem com Ctrl- Z(suspender) somente.
Estou tentando imaginar o que esta opção é para . Quando isso seria útil?
(Observe que esse recurso não existe em todas as variantes do Unix. Está presente no Solaris e no FreeBSD, mas não no Linux. A configuração correspondente é stty dsusp
.)
Talvez menos subjetivamente: existe algo que possa ser realizado com Ctrl- Yque não pode ser realizado com a mesma facilidade Ctrl- Z?
fonte
stty dsusp
, não consegui enviar um SIGTSTP em ^ Y (fiz no Solaris). Você já?Respostas:
A partir do manual do 4BSD para csh :
Portanto, o objetivo é digitar várias entradas enquanto a primeira está sendo processada e interromper o trabalho após a conclusão.
fonte
^Y
será lido com sucesso, em seguida, quando o^Y
for atingido o processo será interrompido. Estou lendo isso certo?^Y
, mesmo que você tenha renegado o processo e fechado o terminal antes que o processo seja retomado. Direita? ( "... depois que é retomado, recebe a entrada de antes de ^ Y." Foi o que eu quis dizer; geralmente não ligo no código C.) :) #Digamos que haja um loop lendo a entrada e executando. Pode ser útil deixar que a tarefa conclua a instrução atual que calcula, sem interrompê-la antes de retornar à linha de comando para uma nova. Então, assim, para terminar um ciclo. Isso encerra o loop normalmente e impede a execução novamente se
read
estiver sob uma restrição de tempo limite.fonte
^Z
fazê - lo .Posso pensar em um cenário em que possa ser útil, mas é uma espécie de argumento artificial.
Suponha que você esteja depurando um script que está gravando arquivos temporários que deseja analisar antes de serem excluídos como parte de uma rotina de limpeza.
Você pode adicionar um em
read foo
algum lugar depois que os arquivos forem gravados (mas antes da limpeza), executar o script e pressionar Ctrl- Yenquanto eles estão sendo gerados. Você será direcionado para um prompt com o script suspenso em segundo plano para fazer o que for necessário efg
permitir que o script seja concluído.fonte
^Z
. Em outras palavras: depois de digitarfg
você terá que dar o script alguma entrada de qualquer maneira antes que ele vai continuar. Daí minha pergunta; Eu ainda não vejo o objetivo^Y
. (Obrigado por responder, no entanto!) :) #O único cenário em que consigo pensar (e nem acho muito convincente) é se você deseja usar algum tipo de digitação antecipada para um comando do shell. Digamos que algum comando esteja em execução, que lerá a entrada em algum momento no futuro. Em seguida, você pode digitá-lo e digitar imediatamente o próximo comando do shell que deseja executar quando o comando em execução for suspenso. Acho que nunca usei isso em várias décadas usando o BSD Unix.
fonte