como passar variáveis de ambiente em dtach? [duplicado]

1

alguma idéia de como obter variáveis de ambiente em dtach ? eles não parecem ser herdados por padrão ...

FOO=bar && dtach -c /tmp/a-socket env
# env does not include $FOO

[editar]

por causa de Reasons (TM) eu preciso ter algum tipo de separador de comando lá. Qualquer um; ou um & &.

(Eu aprecio agora que esta não é uma questão específica do dtach, apenas reflete minha má compreensão do shell ...)

    
por hwjp 01.01.2018 / 18:31

3 respostas

1

Na verdade, export também não é necessário. export significa que:

Marks each NAME for automatic export to the environment of subsequently executed commands. If VALUE is supplied, assign VALUE before exporting.

Você pode expor a variável de ambiente com o seguinte esquema de comando:

FOO=bar dtach -c /tmp/a-socket env

Ele não causará um efeito colateral no qual o próximo processo filho (assim executado) herdará a variável de ambiente FOO=bar .

Comentando sua primeira execução, tente. Não faz sentido adicionar o operador && entre a configuração da variável de ambiente e a execução do processo. Não executa nada (código de saída == 0 ) e, em seguida, executa seu comando sem variável de ambiente.

    
por 01.01.2018 / 19:31
1

No seu exemplo && está funcionando como um separador de comando (especificamente, execute somente o segundo comando se o primeiro for bem-sucedido). Isso provavelmente não é o que você deseja considerar os seguintes exemplos:

name=value;$command
name=value||$command
name=value&&$command

em todos os três casos o nome é definido como valor no shell atual e nos primeiro e terceiro casos o comando $ command é executado porque a atribuição nunca falhará e no segundo caso o $ comando não é executado porque a atribuição será nunca falha (possíveis exceções em shells ímpares com variáveis reservadas). Em nenhum caso a variável foi passada para $ command.

name=value;export name;$command
export name=value;$command

Omitindo exemplos similares com os outros separadores de comandos, estes exemplos adicionam uma exportação que passou a variável para $ command e todos os outros comandos executados daqui em diante na sessão atual.

name=value $command

Observe a ausência de um separador de comando. Neste caso, a variável é passada para $ command e only command, não é usada no shell atual.

    
por 01.01.2018 / 20:49
0

Respondendo a minha própria pergunta, com desculpas: se você realmente tem que ter um separador de comando && ou ; , então você não tem escolha a não ser usar export :

export FOO=bar; dtach -c /tmp/a-socket env
# this time env will show FOO=bar

você pode adicionar um ; unset FOO no final se não quiser poluir seu shell principal ...

    
por 01.01.2018 / 19:12