Comando Bash exec builtin
Em sistemas operacionais do tipo Unix, exec é um comando interno do shell Bash . Permite executar um comando que substitui completamente o processo atual. O processo atual do shell é destruído e totalmente substituído pelo comando que você especificar.
Descrição
exec é uma função crítica de qualquer sistema operacional semelhante ao Unix . Tradicionalmente, a única maneira de criar um novo processo no Unix é bifurcá- lo. A chamada do sistema de garfos faz uma cópia do programa de garfos. A cópia, em seguida, usa exec para executar o processo filho em seu espaço de memória.
Sintaxe
exec [ -c ] [ -l ] [ -um nome ] [ comando [ argumentos ...]] [ redirecionamento ...]
Opções e argumentos
O comando exec builtin utiliza as seguintes opções e argumentos :
-um nome | Passe o nome da string como o argumento zeroth ao comando . Esta opção está disponível nas versões 4.2 e superiores do bash. Quando usado, ele executa o comando e define a variável especial do shell $ 0 como o nome do valor, em vez do comando . Para mais informações, consulte o parâmetro especial 0 do bash . |
-c | Execute o comando em um ambiente vazio. |
-eu | Insira um traço no início do argumento zeroth. Isso pode ser usado para iniciar um shell de login via exec . Para obter mais informações sobre shells de login e requisitos do bash sobre como eles podem ser chamados, consulte Chamada de shell no bash . |
comando | O comando a ser executado. Se você não especificar um comando, o exec ainda poderá fornecer o redirecionamento . |
argumentos | Os argumentos para o comando que você deseja executar. |
redirecionamento | Qualquer redirecionamento para o comando. Se nenhum comando for especificado, o redirecionamento se aplicará ao shell atual. |
Descrição
exec é útil quando você deseja executar um comando, mas não deseja que um shell bash seja o processo pai . Quando você executa um comando, ele substitui completamente o bash – nenhum novo processo é bifurcado, nenhum novo PID é criado e toda a memória controlada pelo bash é destruída e substituída . Isso pode ser útil se, por exemplo, você desejar conceder ao usuário acesso restrito a um determinado comando. Se o comando sair devido a um erro , o usuário não retornará ao shell privilegiado que o executou.
exec também pode ser usado sem nenhum comando, para redirecionar toda a saída do shell atual para um arquivo. Para obter mais informações sobre redirecionamento, consulte redirecionamento no shell bash .
Exemplos
exec rbash
Substitua o shell bash atual por rbash , o shell de logon bash restrito. Como o shell bash original é destruído, o usuário não retornará a um shell bash privilegiado quando o rbash sair.
exec> output.txt
Redirecione toda a saída para o arquivo output.txt para o processo atual do shell. Os redirecionamentos são um caso especial e o exec não destrói o processo atual do shell, mas o bash não imprimirá mais a saída na tela, gravando-a no arquivo. (Essa técnica é muito mais útil em scripts – se o comando acima for executado em um script, toda a saída do script será gravada em output.txt .)
exec 3 <myinfile.txt
Abra myinfile.txt para leitura (” < “) no descritor de arquivo 3 .
O comando acima é um exemplo de abertura explícita de um descritor de arquivo . Veja como abrir descritores de arquivo no bash para obter mais informações.
Após executar o comando acima, você pode ler uma linha de myinfile.txt executando o comando read com a opção -u :
read -u 3 mydata
Aqui, ” -u 3 ” diz à read para obter seus dados do descritor de arquivo 3, que se refere ao myinfile.txt . O conteúdo é lido, uma linha de cada vez, na variável mydata . Isso seria útil se usado como parte de um loop while, por exemplo.
Vejamos mais alguns comandos que abrem e fecham novos descritores de arquivos.
exec 4> out.txt
O comando acima abre out.txt para escrever (” > “) no descritor de arquivo 4 .
exec 3 <& -
Feche (” & – “) o descritor de leitura aberto (” < “) número 3 .
exec 4> & -
Feche o número 4 do descritor de gravação aberto (” > “).
exec 5 <> myfile.txt
Abra myfile.txt para leitura e gravação (” <> “) como descritor de arquivo 5 .
exec 5 <> & -
Feche o descritor de leitura / gravação aberto 5.
exec 6 >> myappendfile.txt
Abra myappendfile.txt para anexar (” >> “) como descritor de arquivo 6 .
exec {myfd}> out.txt
Abra myfile.txt para escrever. Um novo número de descritor de arquivo, escolhido automaticamente, é atribuído à variável myfd .
eco Texto> & myfd
Ecoe o texto ” Texto ” e redirecione a saída para o arquivo (neste caso, meuarquivo.txt ) descrito pelo descritor de gravação (” > “) cujo número é obtido desreferenciando (” & “) a variável denominada myfd .
Comandos relacionados
read – Leia uma linha de entrada e divida-a em palavras.