Eu sei que isso pode soar como "não como pretendido pelo designer", mas tenho uma situação da vida real em que um script bash que estou modificando precisa chamar outro script bash que não tenho permissão para modificar.
Esse "script bash não modificável" começa com:
source `dirname $0`/setenv.sh
(que setenv.sh
também começa com SCR2PATH=source "$( cd "$(dirname "$0")" ; pwd -P )"
e também não pode ser modificado)
Existe um truque no qual eu possa enganar o script filho com um script diferente $0
do script de chamada?
Você não pode "enganar" o script filho, mas pode chamá-lo por meio de um nome diferente criando um link simbólico para o script chamado e chamando o link simbólico. Isso, acredito, atingirá o objetivo que você está procurando.
Exemplo:
Talvez isso faça:
Obviamente,
/path/to/unmodifiable
deve ser um script de shell; esse truque bobo não funcionará com outros tipos de executáveis. Isso também não funcionará comzsh
(mas funcionará com outros shells comodash
,ksh
, etc).Se você precisar originar em vez de chamar o script não modificável, poderá usar o mesmo truque de um wrapper chamando seu script externo ou fazer com que ele se recupere:
Você pode usar
exec -a
em um subshell:(exec -a fakeDollarZero /unmodifiable/bash/script the rest of the args)
Ao contrário da resposta do mosvy , isso funcionaria mesmo se fosse algo diferente de um script bash.