bash:[:参数过多?


8

我正在尝试创建一个目录并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

我该如何解决?又是什么[:错误是什么意思?

附言 有人可以将我引导到“非加密” bash脚本教程吗?


我想您的脚本有问题,您可以通过在if中使用正确的语法开始。 if <COMMANDS>; then <COMMANDS>; fi
karthick87

2
我不知道是否只有我...但是尝试陷阱6;我听说有很多人;)mywiki.wooledge.org/BashPitfalls
Alex Stevens

Answers:


12

脚本中的主要错误是该[命令与command等效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指南来了解bash。


那个指南真的很好!谢谢,否则我将仍在解密手册页:)
Zabba 2011年

另一种方法是检查目录是否存在[-d“ $ APPDIR”]; 然后cd $ APPDIR fi
s1mmel

-3

原型可以是:

  • 在桌面上创建一个文件: 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:)


2
抱歉,没有。这个答案有几个问题。1)缺少{。2)它永远不会运行mkdir。3)您没有测试cd的退出状态。4)不要在脚本上添加扩展名。尤其是.sh当它甚至不是sh脚本时也是如此。5)将其放在脚本中会破坏功能的目的。mywiki.wooledge.org/BashGuide
geirha'5

@geirha:我的错,{在我编辑之前就在那里。
enzotib

答:((MKDIR “$ {} APPDIR”))等于'MKDIR “$ {} APPDIR” '(看后面蜱)
studentz

调试脚本bash -x newDirectory.sh,您将看到该脚本将CD到目录。如果要在那之后运行另一个进程,那就是一匹完全不同的马。
Studentz

该脚本以bash dash ash运行。您可以根据需要更改扩展名。
studentz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.