O erro específico que você está recebendo é por causa da maneira como você está tentando executar o script (e a maneira mais estranha como o script é escrito).
Quando um script é executado, o parâmetro posicional 0
contém o nome pelo qual o script foi invocado, por exemplo, path/to/start.sh
- ou simplesmente ./start.sh
se for chamado a partir do diretório atual. A sintaxe de expansão de parâmetro ${0%/*}
remove o sufixo mais curto de $0
matching /*
deixando (respectivamente) path/to
ou apenas .
e o script tenta alterar para este diretório - em outras palavras, para o diretório pai de start.sh
No entanto, quando você usa sh start.sh
(além de executar o script usando sh
em vez do pretendido /bin/bash
), $0
é igual a start.sh
. Como não há correspondência /
, ${0%/*}
não remove nada de $0
, resultando no script tentando executar o comando cd start.sh
, que obviamente falha porque start.sh
é um arquivo e não um diretório.
A solução é executar o script da maneira pretendida pelo autor - ou seja, garantindo que ele seja executável
chmod +x start.sh
e, em seguida, executá-lo diretamente, por exemplo,
./start.sh