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"