Estou aprendendo o exec
comando. Eu sei que o exec
comando substitui o processo que o iniciou. Portanto, não é possível retornar ao processo que é substituído pelo exec
comando.
Pode-se dizer que seu objetivo é tornar impossível retornar ao processo que o iniciou.
Mas quais são os outros usos para ter algo como exec
disponível como um comando?
command-line
mizech
fonte
fonte
exec ssh server-that-does-byobu-on-login.example.com
muito agradável, pois ^ A ^ D desliga o terminal completamente. (De modo mais geral,exec byobu
(ouexec screen
,exec tmux
).Respostas:
No script do wrapper
exec
é usado principalmente em scripts de wrapper.Se você deseja modificar o ambiente de um programa antes de executar o programa principal, geralmente escreve um script e no final inicia o programa principal. Mas não há necessidade de o script permanecer na memória naquele momento. Portanto,
exec
é usado nesses casos para que o programa principal possa substituir o script mãe.Aqui está um exemplo prático disso. Seu
mate-terminal.wrapper
script vem com o mate-terminal. Ele iniciamate-terminal
alguns argumentos extras, verificando os ambientes do usuário.O ponto a ser observado aqui é que há uma
exec
chamada que substitui esse script na memória.Aqui está uma pergunta semelhante respondida no site StackExchange do Unix e Linux - /unix//q/270929/19288
Para redirecionar descritores de arquivo
Outro uso comum
exec
é o redirecionamento de descritores de arquivos.stdin
,stdout
,stderr
Podem ser redirecionados para arquivos usando exec.Redirecionando
stdout
-exec 1>file
fará com que a saída padrão seja um arquivo nomeadofile
para o final da sessão atual do shell. Qualquer coisa a ser exibida no display estará no arquivo.Redirecionando
stdin
- Também pode ser usado para redirecionar ostdin
arquivo para um arquivo. Por exemplo, se você deseja executar um arquivo de scriptscript.sh
, basta redirecioná-lostdin
para o arquivo usandoexec 0<script.sh
.fonte
exec
disso, é o uso no redirecionamento de descritores de arquivo.O
exec
comando substitui o processo atual do shell pelo comando especificado. Normalmente, quando você executa um comando, um novo processo é gerado (bifurcado). Oexec
comando não gera um novo processo. Em vez disso, o processo atual é sobreposto ao novo comando. Em outras palavras, oexec
comando é executado no lugar do shell atual sem criar um novo processo.Existem três usos mais comuns do comando exec:
1. Substituição do processo
Exemplo-1: Se você abrir um novo
bash
shell comono
pstree
que pareceO
bash
shell anterior ainda está lá e você tem um novobash
shell. Considerando que, se você abrir um novo shell bash como,os
pstree
showsAqui o antigo
bash
é substituído por um novo. É particularmente útil sair do login múltiplo em um comando. É mais seguro e erradica a chance de deixar um terminal aberto por engano. Consulte Sair da raiz e do usuário com um comandoExemplo-2: você pode abrir um arquivo como
Quando você sai,
vi
não há necessidade de fechar o terminal separadamente, pois o shell já foi substituído. Assim que você fechar o vi, o terminal também será fechado.2. Um método de redirecionamento de descritores de arquivos nos scripts de shell
O
exec
comando também pode ser usado em scripts de shell, abrir, fechar e copiar dinamicamente descritores de arquivos. Isso permite executar o redirecionamento de STDIN, STDERR, STDOUT e outros descritores de arquivo para vários arquivos dentro do script de shell, em vez da cadeia de chamada de comando. Se você não especificar um comando ou argumentos, poderá especificar símbolos de redirecionamento e descritores de arquivo para executar essas funções.Digamos que você tenha um script de shell
script.sh
que deseja ter um arquivo de logscript.log
, você pode usarexec
como,que é equivalente a
3. Criando estágios do processo usando o comando exec
Você também pode usar o comando exec para criar um conjunto de scripts de shell que se executam sequencialmente como estágios do processo. Em vez de gerar novos processos toda vez que você precisar transferir o controle para o próximo script, execute o comando exec.
Nesse caso, a última instrução de cada estágio deve ser um
exec
comando que chama o próximo estágio.Veja os usos do
exec
comando nos scripts de shell para mais.Nota: Parte do acima é tirada disso.
fonte
Tanto quanto sei, também é usado para redirecionar descritores de arquivos (por exemplo, STDOUT, STDERR, STDIN) de um script bash.
Por exemplo, você pode ler um arquivo em vez do teclado usando o redirecionamento STDIN e gravar em um arquivo em vez do terminal usando o redirecionamento STDOUT (ou pode ser STDERR dependendo do programa).
fonte