Баш: [: слишком много аргументов?

Я пытаюсь создать каталог и cd в него:

В ~ / .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
}

Когда я перезагружаю bashrc (. ~/.bashrc), я получаю ошибка:

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

Как это исправить? И что означает [: в ошибке?

Ps. Может ли кто-нибудь направить меня к «не зашифрованному» учебнику по написанию сценариев bash?

8
задан 2 July 2012 в 04:32

2 ответа

Основная ошибка в вашем сценарии заключается в том, что команда [, эквивалентная команде test, используется для проверки условий, таких как сравнение строк, наличие файлов и т. Д.

Чтобы проверить состояние выхода процессов, вы должны использовать if без [, поэтому ваш сценарий может быть

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

. Это объясняется в Подводные камни Bash: 9. if [ grep foo myfile .

Я предлагаю вам пройти Руководство GrayCat Bash , чтобы понять bash.

0
ответ дан 2 July 2012 в 04:32

Прототипом может быть:

  • Создать файл на рабочем столе: touch newDirectory.sh
  • Сделать файл исполняемым: chmod +x newDirectory.sh
  • Для вызова сценария из терминала на рабочем столе: ./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}

Маленькая рекомендация: если вы новичок, не связывайтесь с .bashrc:)

0
ответ дан 2 July 2012 в 04:32

Другие вопросы по тегам:

Похожие вопросы: