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
cdpersonalizada com o argumentowith\ spaces. - Obviamente, você precisa fazer isso, pois, caso contrário, sua função receberia dois argumentos, ou seja,
withespaces. - Então, corretamente, a sua função recebe o argumento
with spacescomo um . - Você passa esse argumento para
builtin cdusando$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
cdcom os dois argumentoswithespaces.
Então, para corrigir isso:
- Cite
$1com 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() .