Como posso substituir um comando por outro temporariamente?

2

Eu gostaria de usar alias para o gsed, mas apenas enquanto um script em particular estiver sendo executado.

Eu tenho um script que chama sed. No Mac, o BSD sed não suporta os recursos necessários, mas eu não quero substituí-lo globalmente pela versão GNU.

Não consigo definir um alias no invocador, pois os aliases não são propagados e não posso defini-lo em um script de login, pois ele será aplicado globalmente. O script não pode ser editado.

Estou postando minha solução atual, usando um symlink / path hack desagradável, como resposta, mas espero que alguém encontre uma solução melhor.

    
por Duncan McGregor 11.02.2014 / 22:11

2 respostas

2
#!/bin/sh
# Runs a command with gsed substituting for sed

set -e

mkdir -p /tmp/temp-path
ln -fs 'which gsed' /tmp/temp-path/sed
export PATH=/tmp/temp-path/:$PATH
eval "$@"
    
por 11.02.2014 / 22:11
0

Uma alternativa é instalar as versões GNU dos utilitários em um diretório específico, como /usr/local ou /usr/local/gnu

Então, quando você quiser usar esse aplicativo específico em um script, você o indicaria explicitamente como /usr/local/gnu/bin/sed

Outra opção seria atribuir uma variável SED enquanto é exportável.

SED='which gsed'
export SED

Em seguida, chame sed via ${SED}

    
por 11.02.2014 / 22:19