bash -c 'some command'
retém o acesso à entrada padrão do chamador; portanto, os read
comandos de leitura da entrada padrão funcionarão normalmente. bash <<< 'some command'
substitui a entrada com a linha que está sendo transmitido, por isso bash -c cat
e bash <<< cat
fazer coisas diferentes.
$ bash -c cat
abc
abc
^D
$ bash <<< cat
$
Por outro lado, você pode usar esse recurso para fornecer sua própria entrada padrão a ser usada $'...'
, se você for muito cuidadoso:
$ bash <<< $'read x y\nabc def ghi\necho $y'
def ghi
$
Eu não gostaria de confiar nisso, mas às vezes poderia ser conveniente.
bash -c
também permite que argumentos sejam passados para o script e $0
sejam definidos:
bash -c 'some command' sh abc def
irá definir $1
para abc
e $2
para def
dentro some command
.