Um substituto correto seria:
cd() {
builtin cd "$1"
pwd
}
Você precisa citar uma variável que contenha espaços quando for expandida, se quiser mantê-los.
Por que preciso fazer isso?
Vamos examinar:
- Digamos que você chame sua função
cd
personalizada com o argumentowith\ spaces
. - Obviamente, você precisa fazer isso, pois, caso contrário, sua função receberia dois argumentos, ou seja,
with
espaces
. - Então, corretamente, a sua função recebe o argumento
with spaces
como um . - Você passa esse argumento para
builtin cd
usando$1
. -
$1
é expandido automaticamente parawith spaces
(desde que a função foi recebida). - Sua chamada agora é
builtin cd with spaces/
- Isso resulta novamente em uma chamada para
cd
com os dois argumentoswith
espaces
.
Então, para corrigir isso:
- Cite
$1
com aspas duplas . - O comando é expandido para
builtin cd "with spaces"
. - Agora,
cd
é chamado corretamente com o argumento um novamente.
Outra possibilidade é usar apenas um parâmetro mais genérico "$@"
em vez de "$1"
para passar todos parâmetros e não apenas o primeiro para outro script. Isso é o que você quer fazer em 99% dos casos.
cd() {
builtin cd "$@"
pwd
}
Obviamente, a mesma correção se aplica à sua função cs()
.