bash: [: muitos argumentos?

7

Estou tentando criar um diretório e cd :

Em ~ / .bashrc:

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

Quando eu recarregar o bashrc ( . ~/.bashrc ), recebo o erro:

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

Como faço para corrigir isso? E o que significa [: no erro?

Ps. Alguém poderia me direcionar para um tutorial de script bash "não-enigmático"?

    
por Zabba 02.05.2011 / 04:16

2 respostas

12

O principal erro em seu script é que o comando [ , equivalente ao comando test , é usado para testar condições, como comparação de string, existência de arquivos e assim por diante.

Para testar o status de saída dos processos, você precisa usar if sem [ , portanto, seu script pode ser

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

Isso é explicado em Armadilhas do Bash: 9. if [grep foo myfile .

Eu sugiro que você passe pelo Guia de GrayCat Bash para entender o bash.

    
por enzotib 02.05.2011 / 09:17
-3

Um protótipo poderia ser:

  • Crie um arquivo em sua área de trabalho: touch newDirectory.sh
  • Tornar o arquivo executável: chmod +x newDirectory.sh
  • Para chamar o script de um terminal na área de trabalho: ./newDirectory.sh anyName

/

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

Pouca recomendação: se você é novo, não mexa com .bashrc :)

    
por studentz 02.05.2011 / 05:45