Gostaria de saber a maneira mais fácil de criar um script bash que executará um aplicativo no MacOSX (é um sistema baseado em UNIX, por isso presumi que este fosse o lugar certo). aguarde o programa sair. Se a saída não foi um acidente, execute-o novamente. Caso contrário, deixe a janela do relatório de falha aberta e saia.
Eu gostaria que esse script fosse executado para sempre até a falha ou o encerramento manual.
Tenho uma ideia vaga, mas não tenho certeza. Aqui está o que eu tenho até agora:
echo "Launching Autorun…"
if ["$1" -eq "0"]; then
# Application exited successfully. Restarting.
/path/to/application.app
else
# An error occured. Do nothing and exit.
exit
fi
bash
shell-script
osx
Ben enlouqueceu Euden
fonte
fonte
Respostas:
Isto é o que o Bash while loops faz:
Ele executará o aplicativo e, se terminar com êxito, execute o corpo do loop.
:
é o comando no-op do shell (o loop precisa ter um corpo, então é isso que colocamos lá); depois disso, ele volta ao topo e executa o programa novamente. Se falhar, o loop para de executar e o script é encerrado.No entanto, parece que o que você está executando pode ser um aplicativo Mac comum (
.app
): existem alguns problemas que surgem nesse caso. Uma delas é que você precisa usar oopen
comando , em vez de correr o diretório do aplicativo diretamente:open /path/to/application.app
.A outra é que, quando você faz
open
, normalmente termina imediatamente com sucesso, independentemente do que o aplicativo continua a fazer: isso não é absolutamente universal, mas a maioria será. Se o seu se faz, você pode usar a-W
opção para forçaropen
a bloquear até que as pontas de aplicação:open -W /path/to/application.app
. Observe que, se o aplicativo já estiver em execução, isso esperará até que a execução existente termine também.A quantidade de um problema depende de qual aplicativo você está executando. Se não funcionar bem, fazer isso a partir do shell pode não ser a melhor opção. Nesse caso, é provável que você esteja melhor com o AppleScript, sobre o qual você pode perguntar sobre o Ask Different .
fonte
open
apenas retorna falhas para determinados erros de inicialização. Os aplicativos são iniciados por um serviço do sistema, não diretamente, portanto, não há canal de comunicação direta de volta. Às vezes, é possível iniciar o executável do aplicativo diretamente:/Applications/YourProgram.app/Contents/MacOS/YourProgram
. Caso contrário, estamos saindo do Unix para lugares onde você terá uma resposta melhor em Ask Different . Você pode executar o AppleScript a partir do shell comosascript
Eu testei isso:
Isso funciona testando o código de retorno do seu comando, estilo POSIX. 0 significa Ok, qualquer outra coisa pode ser tratada como um erro.
fonte