これらのbash文字列を正しいGitコマンドに拡張する正しい方法は何ですか?

これらのbash文字列を正しいGitコマンドに拡張する正しい方法は何ですか?

いくつかの基本的なbashスクリプトを書こうとしましたが、これらの文字列をGitコマンドに拡張するのに問題があることがわかりました。

アイデアは、サブディレクトリにGitリポジトリを含む最上位ディレクトリにスクリプトを渡し、サブディレクトリから同じコマンドを実行してオプションで出力をteeファイルに出力することです。

問題は、追加オプションを含むgitコマンドが正しく機能しないことです。だからコマンドが動作しますdiff。動作しますが、動作しません。たとえば、オプションは機能しません。statusremoteremote show originre

processing /home/vfclists/project1/
git: 'remote -v' is not a git command. See 'git --help'.

processing /home/vfclists/project1/
git: 'remote show origin' is not a git command. See 'git --help'.

問題はbash拡張で発生しますか、それGit自体で発生しますか、またはその両方で発生しますか?

#!/bin/bash

usage()
{
cat << EOF
checkrepos command output file

usage: $0 options

OPTIONS:

  commands 
    r remote show origin
    d diff
    s status
    e remote
  other options
   -d    directory
   -t    filename for tee
EOF
}

WD=$(pwd)
echo "working directory $WD"

while getopts "c:t:v:h:" OPTION
do
     case $OPTION in
         c)
         case $OPTARG in
           r)
             COMMAND="remote show origin"
             ;;
           d)
             COMMAND="diff"
             ;;
           s)
             COMMAND="status"
             ;;
           e)
             COMMAND="remote -v"
             ;;
         esac
         ;;
         t)
             OUTPUTFILE=$OPTARG
             ;;
         v)
             VERBOSE=1
             ;;
         h)
             usage
             exit 1
             ;;
         ?)
             usage
             exit
             ;;
     esac
done

if  [[ -z $COMMAND ]]
then
    echo 'command is required'
    usage
    exit 1
fi



for d in $WD/* ; do
  echo ""
  echo "===================="
  echo ""
  echo "processing $d"

  git -C "$d"  "$COMMAND"
  echo ""
  echo "===================="
  echo ""
done

ベストアンサー1

rこの場合を例に挙げると、

COMMAND="remote show origin"

続いて

git -C "$d" "$COMMAND"

git3つの引数、の値、-Cおよびd予想remote show originされる5つの引数の代わりに(およびがremoteそれぞれshow置き換えoriginられているremote show origin)を確認します。

を使用してbash引用符を削除するだけで問題が解決します。

git -C "$d" $COMMAND

Zshでは、次のように文字列を分割する必要があります。

git -C "$d" $=COMMAND

(ありがとうございます。イルカチョそしてザイルズ! )。

おすすめ記事