Considere que &&
é um operador lógico. Não não significa "também executar este comando" significa "executar este comando se o outro for bem-sucedido".
Isso significa que, se o comando rm
falhar (o que acontecerá se algum dos três diretórios não existir), o mkdir
não será executado. Isso não soa como o comportamento que você quer; Se os diretórios não existirem, provavelmente é bom criá-los.
Use ;
O ponto e vírgula ;
é usado para separar comandos. Os comandos são executados sequencialmente, esperando por cada um antes de continuar para o próximo, mas seu sucesso ou falha não tem impacto um no outro.
Escape de citações internas
As citações dentro de outras citações devem ter escape, caso contrário você estará criando um ponto final e um ponto inicial extra. Seu comando:
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input Output Partition""
Torna-se:
ssh -n $username@$masterHostname "ssh -t -t $username@$line \"rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input OutputPartition\""
Seu comando atual, devido à falta de citações com escape, deve estar em execução:
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition
se isso for bem sucedido:
mkdir -p EC2_WORKSPACE/$project Input Output Partition"" # runs on your local machine
Você notará que o realce da sintaxe mostra o comando inteiro como vermelho aqui, o que significa que o comando inteiro é a cadeia que está sendo passada para o ssh. Verifique sua máquina local; você pode ter os diretórios Input
Output
e Partition
onde você estava executando isso.