Eu tenho uma biblioteca - os usuários devem criar arquivos executáveis, potencialmente com um hashbang para informar exec
qual executável usar. Se eles omitirem o hashbang, então eu acho que a maioria dos sistemas padrão para /bin/sh
, eu quero mudar esse padrão.
Portanto, alguns arquivos podem começar com:
#!/usr/bin/env foobar
outros arquivos podem começar com:
#!/usr/bin/env perl
ou
#!/usr/bin/env ruby
E, em alguns casos, o usuário omitirá totalmente o hashbang. Nesse caso, ainda vou executar o arquivo diretamente, e quero usar como padrão o executável foobar
.
Em outras palavras , não sei qual será o hashbang antecipadamente e quero que o padrão seja foobar
em vez do padrão ser /bin/sh
, se não houver hashbang presente.
Acho que a maneira de fazer o que estou fazendo é criar um executável que possa executar exec
primeiro, e se isso falhar com uma mensagem de erro específica, execute o script indiretamente com o foobar
executável?
Algo parecido com isto:
function run {
stdio=$("$1" 2>&1)
if [[ stdout/stderr matches a certain error message ]]; then
foobar $1
fi
}
A minha pergunta é - alguém sabe do que estou a falar - e alguém sabe como posso predefinir um executável em particular se não houver hashbang? Não que seja em teoria menos conveniente checar se há um hashbang, e mais em teoria mais conveniente apenas para executá-lo?