web-dev-qa-db-fra.com

bash: [: trop d'arguments?

J'essaie de créer un répertoire et cd dans celui-ci:

Dans ~/.bashrc:

function abc() {
  appname=$1
  appdir="$HOME/code/$appname"
  if [ mkdir $appdir -a cd $appdir ]; then
    echo Success
  else
    echo Failed to create and switch directory
  fi
}

Lorsque je recharge bashrc (. ~/.bashrc), le message d'erreur suivant s'affiche:

bash: [: too many arguments
Failed to create and switch directory

Comment puis-je réparer ça? Et que signifie [: dans l'erreur?

Ps. Est-ce que quelqu'un pourrait me diriger vers un tutoriel de script bash "non cryptique"?

8
Zabba

L'erreur principale dans votre script est que la commande [, équivalente à la commande test, est utilisée pour tester des conditions, telles que la comparaison de chaînes, l'existence de fichiers, etc.

Pour tester l’état de sortie des processus, vous devez utiliser if sans [, afin que votre script puisse être

if mkdir "$appdir" && cd "$appdir"; then
  echo "Success"
else
  echo "Failed to create and switch directory"
fi

Ceci est expliqué dans Pièges Bash: 9. si [grep foo myfile] .

Je suggère que vous parcouriez Guide GrayCat Bash pour comprendre bash.

12
enzotib