&
é o operador de plano de fundo do shell ; coloca o comando precedendo-o em segundo plano e continua.
Então
mkdir gates &
cd gates
inicia mkdir gates
em segundo plano e executa imediatamente cd gates
, que tenta alterar o diretório antes de ser criado (e falhar).
ls & mkdir gates
funciona porque mkdir gates
não depende de nada que ls
faça; tudo o que acontece é que ls
é iniciado em segundo plano, exibindo a listagem de diretórios, enquanto mkdir
cria o diretório gates
.
Você provavelmente está procurando
mkdir gates && cd gates
que mudará de diretório somente se mkdir
for bem-sucedido; você pode preferir
mkdir -p gates && cd gates
que não falhará se o diretório já existir.