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

Я пытаюсь создать каталог и 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-скриптингу?

7
задан 2 July 2012 в 05:32

11 ответов

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

  • Создать файл на рабочем столе: 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 :)

12
ответ дан 31 July 2018 в 11:13

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

  • Создать файл на рабочем столе: 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 :)

12
ответ дан 31 July 2018 в 12:13

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

  • Создать файл на рабочем столе: 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 :)

12
ответ дан 2 August 2018 в 03:35

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

  • Создать файл на рабочем столе: 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 :)

12
ответ дан 4 August 2018 в 19:36

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

  • Создать файл на рабочем столе: 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 :)

12
ответ дан 6 August 2018 в 03:42

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

  • Создать файл на рабочем столе: 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 :)

12
ответ дан 7 August 2018 в 21:36

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

  • Создать файл на рабочем столе: 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 :)

12
ответ дан 10 August 2018 в 09:51

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

  • Создать файл на рабочем столе: 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 :)

12
ответ дан 13 August 2018 в 16:08
  • 1
    Извините, нет. Есть несколько проблем с этим ответом. 1) отсутствует {. 2) он никогда не запускается mkdir. 3) вы не проверяли статус выхода cd. 4) Не ставьте расширения на скрипты. Особенно не .sh, когда это даже не sh-скрипт. 5) Помещение в скрипт отрицает назначение функции. mywiki.wooledge.org/BashGuide – geirha 2 May 2011 в 12:38
  • 2
    @geirha: моя вина, что { был там до моего редактирования. – enzotib 2 May 2011 в 12:44
  • 3
    Ответ: ((mkdir & quot; $ {appdir} & quot;)) равно ' mkdir & quot; $ {appdir} & quot; ' (посмотрите на обратные галочки) – studentz 2 May 2011 в 19:29
  • 4
    отладьте скрипт bash -x newDirectory.sh и вы увидите, что скрипт перейдет в каталог Если после этого вы захотите запустить другой процесс, это совершенно другая лошадь. – studentz 2 May 2011 в 19:41
  • 5
    Скрипт работает с Bash Dash Ash. Вы можете изменить расширение как хотите. – studentz 2 May 2011 в 19:43
  • 6
    Отлично спасибо. Это руководство выглядит хорошо. – Zabba 2 May 2011 в 21:16
  • 7
    Это руководство действительно очень хорошо! Спасибо, иначе я бы еще расшифровал man-страницы :) – Zabba 2 May 2011 в 21:34
  • 8
    Другой способ - проверить, существует ли каталог, если [-d & quot; $ APPDIR & quot; ]; тогда cd $ APPDIR fi – s1mmel 21 June 2018 в 14:50

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

проверьте состояние завершения процессов, которые вы должны использовать if без [, чтобы ваш сценарий мог быть

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

Это объясняется в Bash Pitfalls: 9. if [grep foo myfile .

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

12
ответ дан 15 August 2018 в 22:55
  • 1
    Отлично спасибо. Это руководство выглядит хорошо. – Zabba 2 May 2011 в 21:16
  • 2
    Это руководство действительно очень хорошо! Спасибо, иначе я бы еще расшифровал man-страницы :) – Zabba 2 May 2011 в 21:34
  • 3
    Другой способ - проверить, существует ли каталог, если [-d & quot; $ APPDIR & quot; ]; тогда cd $ APPDIR fi – s1mmel 21 June 2018 в 14:50

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

Создать файл на рабочем столе: 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:)

-3
ответ дан 25 May 2018 в 21:41
  • 1
    Простите, нет. Есть несколько проблем с этим ответом. 1) отсутствует {. 2) он никогда не запускается mkdir. 3) вы не проверили статус выхода cd. 4) Не ставьте расширения на скрипты. Особенно не .sh, когда это даже не скрипт. 5) Помещая это в сценарий, побеждает цель функции. mywiki.wooledge.org/BashGuide – geirha 2 May 2011 в 12:38
  • 2
    @geirha: моя ошибка, { был там до моего редактирования. – enzotib 2 May 2011 в 12:44
  • 3
    Ответ: ((mkdir " $ {appdir} ")) равен ' mkdir " $ {appdir} " ' (посмотрите на обратные тики) – studentz 2 May 2011 в 19:29
  • 4
    отлаживаем скрипт bash -x newDirectory.sh, и вы увидите, что скрипт будет cd в каталог. Если после этого вы хотите запустить другой процесс, это совершенно другая лошадь. – studentz 2 May 2011 в 19:41
  • 5
    Скрипт работает с зоной баха. Вы можете изменить расширение, что хотите. – studentz 2 May 2011 в 19:43

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

  • Создать файл на рабочем столе: 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 :)

-3
ответ дан 25 July 2018 в 22:04

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

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