Como executar algo no shell atual

Como executar algo no shell atual

Quero criar um script bash ou algo semelhante que possa executar no shell atual:

 echo '#!/bin/bash 
  export foo="bar" ' > zoom.sh

mas se eu quiser executar este script no processo atual:

exec ./zoom.sh

então meu terminal sairá do "processo concluído", mesmo se eu usar set +e, ele ainda sairá.

Existe sourcee evalqual executará coisas no shell atual, então talvez eval seja minha melhor aposta? Uma função bash funcionará - mas source, em primeiro lugar, preciso confiar no usuário .

Responder1

Do manual, parece que exec não criará um novo processo, apenas substituirá o shell atual; portanto, após a execução, ele encerrará a sessão também.

exec [-cl] [-a name] [command [arguments]]:
se o comando for especificado, ele substituirá o shell. Nenhum novo processo é criado. Os argumentos tornam-se os argumentos para comandar. Se a opção -l for fornecida, o shell colocará um travessão no início do argumento zero passado ao comando. Isso é o que login(1) faz. A -copção faz com que o comando seja executado com um ambiente vazio. Se -afor fornecido, o shell passa o nome como o argumento zero para o comando executado. Se o comando não puder ser executado por algum motivo, um shell não interativo será encerrado, a menos que a opção shell execfailesteja habilitada, caso em que retornará falha. Um shell interativo retorna falha se o arquivo não puder ser executado. Se o comando não for especificado, qualquer redirecionamento terá efeito no shell atual e o status de retorno será 0. Se houver um erro de redirecionamento, o status de retorno será 1.

$ cat zoom.sh
#!/bin/bash
export foo="bar"
echo $?
$ exec ./zoom.sh
0
Connection to localhost closed

informação relacionada