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

どうすれば修正できますか?そして[:、エラーの意味は何ですか?

Ps。誰かが「非暗号化」bashスクリプトチュートリアルに案内してもらえますか?


スクリプトに問題があると思います。ifで適切な構文を使用することから始めることができます。 if <COMMANDS>; then <COMMANDS>; fi
karthick87 2011年

2
それが私だけかどうかはわかりませんが、Pitfall 6を試してください。私はそれが少数の人々を得ると聞きます;)mywiki.wooledge.org/BashPitfalls
Alex Stevens

回答:


12

スクリプトの主なエラーは、[commandと同等の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

bashを理解するために、GrayCat Bashガイド読むことをお勧めします。


そのガイドは本当にとても良いです!ありがとう、そうでなければ、私はまだ:) manページを解読されるだろう
Zabba

別の方法は、[-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

@geirha:私のせいで{、編集前にありました。
enzotib

回答:((mkdir "$ {appdir}"))is equal 'mkdir "$ {appdir}" '(back ticksを見てください)
studentz

スクリプトbash -x newDirectory.shをデバッグすると、スクリプトがディレクトリにcdすることがわかります。その後別のプロセスを実行したい場合は、まったく別の馬です。
studentz

スクリプトは、bash dash ashで実行されます。拡張子は自由に変更できます。
studentz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.