cmd1 && cmd2
significa "do cmd1
e, se for bem-sucedido, faça cmd2
". Não se sabe se um comando foi bem-sucedido até que tenha terminado de executar, portanto, não faz sentido colocar um comando em segundo plano e fazer com que a execução do próximo comando dependa de o primeiro ter êxito.
Parece que o que você realmente quer fazer é "iniciar cmd1
em segundo plano e, em seguida, fazer cmd2
". Isso é apenas cmd1 & cmd2
.
Assim, aqui está o comando que você deseja: cd foo && git pull && node server.js & pid=$! && echo "$pid"