tubo paraexec

tubo paraexec

Não estou muito familiarizado com exec. Eu estava fazendo alguns testes e exemplos. Eu queria passar um comando escrito em um arquivo para ele. Espero que esse comando seja executado execcomo se fosse executado diretamente na linha de comando. Aqui está o que eu configurei e tentei:

[kellyry@ch12ldvela00 ~]$ cat exec_test
ls
[kellyry@ch12ldvela00 ~]$ cat exec_test | exec
[kellyry@ch12ldvela00 ~]$ cat exec_test | xargs exec
xargs: exec: No such file or directory
[kellyry@ch12ldvela00 ~]$ exec ls
exec_test            file2             file3
. . .          

Aqui está a parte mais estranha. Executar a última linha exec lsnão retorna. Esse é o terminal trava e não consigo me comunicar com ele. Estou pensando que este último problema pode ser um problema com o Mobaxterm, que estou usando para fazer ssh no servidor.

Responder1

Na bashpágina de manual:

exec [-cl] [-a name] [command [arguments]]

Se commandfor especificado, ele substitui o shell. Nenhum novo processo é criado.

[...]

Se commandnão for especificado, qualquer redirecionamento terá efeito no shell atual e o status de retorno será 0.

tubo paraexec

A primeira coisa que você tentou foi

cat exec_test | exec

Isso é enviado lsna execentrada padrão, não como um argumento. execé executado sem argumentos e não possui redirecionamentos, portanto não faz nada.

Se você deseja executar (ou "executar") o(s) comando(s) no arquivo, não é para isso execque serve. Você pode fazer isso com source(ou a abreviatura .):

source exec_test

tubo paraxargs exec

A próxima coisa que você tentou

cat exec_test | xargs exec

execé uma festaconstruídas em. Ele está disponível apenas no bash, portanto xargsnão consigo encontrá-lo para executá-lo.

execno shell principal

Finalmente você tentou

exec ls

Isso foi executado lse depois desligou o terminal. Isso porque, conforme documentado, ele substituiu o processo shell. Depois de lsterminar, não há mais nada em execução no terminal. (Alguns emuladores de terminal fecharão automaticamente neste ponto. Felizmente, o seu não fechou, então você ainda poderá ver a saída.)

Oexemplo que você estava tentando seguirteve uma etapa extra:

bash
exec ls

Isso primeiro inicia um novo bash, rodando como filho do de "nível superior". O exec lsthen substitui esse shell e sai. Em seguida, o shell pai é retomado, para que você não fique com um terminal travado.

informação relacionada