Um alias é expandido simplesmente substituindo o alias por sua definição (como uma lista de tokens, não uma string, que é basicamente equivalente a pegar a string e adicionar um espaço no final). Então stopdev; true
é expandido para
cd $HOME/website; make website_stop; make backend_stop; ; true
^^^
Como você não pode ter dois pontos-e-vírgulas consecutivos na sintaxe do shell, isso é um erro de sintaxe.
Você pode remover o ;
, o que tornará stopdev; startev
funcionando, mas não é bom, porque qualquer argumento que você passar para stopdev
será passado para make backend_stop
, o que provavelmente não é desejável.
Você deve fazer isso uma função. Além disso, não execute os comandos make
se o comando cd
falhar.
stopdev () {
cd "$HOME/website" && {
make website_stop
make backend_stop
}
}
Uma melhoria seria fazer a função retornar um código de falha mesmo se make website_stop
falhar, mas make backend_stop
tiver êxito.
stopdev () {
cd "$HOME/website" && {
make website_stop
ret=$?
make backend_stop && return $ret
}
}
Observe que isso deixa você no diretório ~/website
. Para evitar alterar o diretório do processo do shell, execute a função em um subshell.
stopdev () (
cd "$HOME/website" && {
make website_stop
ret=$?
make backend_stop && return $ret
}
)
Como alternativa, com o GNU make, você pode usar sua opção -C
.
stopdev () {
make -C "$HOME/website" website_stop
ret=$?
make -C "$HOME/website" backend_stop && return $ret
}
Se os alvos nunca falharem, basta passar os dois.
stopdev () (
cd "$HOME/website" && make website_stop backend_stop
)
ou
stopdev () {
make -C "$HOME/website" website_stop backend_stop
}