Bem, você parece ter uma boa compreensão disso. Para esclarecer um pouco do que você tem,
-
sh -c /path/to/Program
é bastante semelhante a$ sh % /path/to/Program % Ctrl+D (or you could type “exit”) $
onde você inicia um novo processo de shell, fornecer o caminho do comando do aplicativo para o novo shell, e então deixe o novo shell terminar. Eu mostrei o novo shell dando um prompt diferente para fins de ilustração; isso provavelmente não aconteceria na vida real. A construção
sh -c "command"
é principalmente útil para fazer coisas complicadas, como agrupar vários comandos em um pacote, então eles se parecem com um único comando (uma espécie de script sem nome de uso único), ou construir comandos complicados, possivelmente a partir de variáveis shell. Você dificilmente usaria isso apenas para executar um único programa com argumentos simples. -
2>&1
significa redirecionar o erro padrão para a saída padrão. Isso não tem muito a ver com&
; em vez disso, você usa quando um comando envia mensagens de erro para a tela mesmo se você dissercommand > file
e você deseja capturar as mensagens de erro no arquivo. - Redirecionar a saída para
nohup.out
é um efeito colateral trivial denohup
. O objetivo principal denohup command &
é executarcommand
de forma assíncrona (comumente conhecido como “no fundo”, ou como um "processo independente de shell", para usar suas palavras e configurá-lo para que ele tenha uma chance melhor de poder continuar a executar se você terminar o shell (por exemplo, logout) enquanto o comando ainda estiver em execução.
bash(1)
e o Bash Reference Manual
são boas fontes de informação.