Alias ​​cd et ls avec prise en charge des espaces et des arguments

J’ai donc commencé par cette discussion et elle fait fondamentalement exactement ce que je veux.

Cependant, la solution pour conserver les espaces de répertoire à l’aide de guillemets échoue lors de l’utilisation d’arguments, par exemple, cd -P dir . Des idées pour préserver les espaces et autoriser les options?

C’est la fonction que j’utilise actuellement.

 function cd { new_directory="$*"; if [ $# -eq 0 ]; then new_directory=${HOME}; fi; builtin cd "${new_directory}" && ls; } 

Par exemple, avec ce qui précède, cd -P My\ Documents/ devient le cd "-P My Documents" qui échoue évidemment.

Lorsque vous écrivez $* , vous avez perdu: cela efface la distinction entre les espaces dans un argument et les espaces pour séparer les arguments. Utilisez "$@" place, qui se développe à un mot par argument.

 function cd { builtin cd "$@" && ls }