% echo <(echo "ls; pwd; a=7")
/proc/self/fd/11
% bash
$ echo <(echo "ls; pwd; a=7")
/dev/fd/63
, portanto, a forma <(...)
é, na verdade, um caminho para um descritor de arquivo específico para o shell que pode não estar disponível para outros processos; o bash
one em particular é na verdade um pipe:
$ function hmm() { ls -al $1; }
$ hmm <(echo pwd)
lr-x------ 1 jhqdoe jhqdoe 64 Aug 21 14:58 /dev/fd/63 -> pipe:[910134]
sudo
se preocupa por motivos de segurança para fechar todos esses descritores de arquivos por padrão (consulte --close-from
opção docs em sudo(8)
). Você pode ser capaz de mexer com um desses descritores de arquivo (se as políticas de segurança permitirem e você estiver bem com o risco) através do closefrom_override
e, em seguida, também --close-from
, talvez.
Outro método seria usar expect
e, em seguida, transformar as coisas para o usuário depois de executar alguns comandos:
#!/usr/bin/env expect
spawn -noecho bash
expect -ex {$}
send "pwd\r"
expect -ex {$}
interact