9 votes

bash : [ : trop d'arguments ?

J'essaie de créer un répertoire et cd en elle :

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 ) Je reçois l'erreur :

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

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

Ps. Quelqu'un pourrait-il me diriger vers un tutoriel de script bash "non cryptique" ?

13voto

enzotib Points 86709

L'erreur principale dans votre script est que les [ équivalent à test est utilisée pour tester des conditions, comme la comparaison de chaînes de caractères, l'existence de fichiers, etc.

Pour tester le statut de sortie des processus, vous devez utiliser if sans [ donc votre script pourrait être

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

Ceci est expliqué dans [Les pièges de Bash : 9. si [grep foo monfichier](http://mywiki.wooledge.org/BashPitfalls#if_.5Bgrep_foo_myfile.5D) .

Je vous suggère de passer par Guide GrayCat Bash pour comprendre bash.

-3voto

studentz Points 1

Un prototype pourrait être :

  • Créez un fichier sur votre bureau : touch newDirectory.sh
  • Rendre le fichier exécutable : chmod +x newDirectory.sh
  • Pour appeler le script depuis un terminal dans le bureau : ./newDirectory.sh anyName

/

#!/bin/bash
function abc() {
  appname=${1}
  appdir="$HOME/Desktop/$appname"
  if (( mkdir "${appdir}" )) ; then     
    cd "${appdir}"  
    echo "Success" 
  else   
    echo "Failed to create and switch directory" 
  fi
}
abc ${1}

Petite recommandation : si vous êtes novice, ne vous embêtez pas avec les .bashrc :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X