bash: [: trop d'arguments?


8

J'essaye de créer un répertoire et cddedans:

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), j'obtiens l'erreur:

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

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

Ps. Quelqu'un pourrait-il me diriger vers un didacticiel de script bash «non cryptique»?


Il y a quelque chose qui ne va pas dans votre script, je suppose, vous pouvez commencer par utiliser la syntaxe appropriée avec if. if <COMMANDS>; then <COMMANDS>; fi
— karthick87

2
Je ne sais pas si c'est juste moi ... mais essayez Pitfall 6; J'entends qu'il obtient quelques personnes;) mywiki.wooledge.org/BashPitfalls
— Alex Stevens

Réponses:


12

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

Pour tester l'état de sortie des processus dont vous devez vous ifpasser [, 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 Bash Pitfalls: 9. if [grep foo myfile .

Je vous suggère de parcourir le GrayBat Bash Guide pour comprendre bash.


Ce guide est vraiment très bon! Merci, sinon je décrypterais encore les pages de manuel :)
— Zabba

Une autre façon consiste à vérifier si le répertoire existe si [-d "$ APPDIR"]; puis cd $ APPDIR fi
— s1mmel

-3

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 du 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 nouveau, ne plaisante pas .bashrc:)


2
Non désolé. Il y a plusieurs problèmes avec cette réponse. 1) manquant a {. 2) il ne fonctionne jamais mkdir. 3) vous n'avez pas testé cdl'état de sortie de. 4) Ne mettez pas d'extensions sur les scripts. Surtout pas .shquand ce n'est même pas un sh-script. 5) Le mettre dans un script va à l'encontre du but de la fonction. mywiki.wooledge.org/BashGuide
— geirha

@geirha: ma faute, {c'était avant ma retouche.
— enzotib

Réponse: ((mkdir "$ {appdir}")) est égal à 'mkdir "$ {appdir}" '(regardez les tiques arrière)
— studentz

déboguez le script bash -x newDirectory.sh et vous verrez que le script se placera dans le répertoire. Si vous voulez exécuter un autre processus après cela, c'est un cheval complètement différent.
— studentz

Le script s'exécute avec bash dash ash. Vous pouvez modifier l'extension comme vous le souhaitez.
— studentz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.