いくつかの基本的なbashスクリプトを書こうとしましたが、これらの文字列をGit
コマンドに拡張するのに問題があることがわかりました。
アイデアは、サブディレクトリにGitリポジトリを含む最上位ディレクトリにスクリプトを渡し、サブディレクトリから同じコマンドを実行してオプションで出力をtee
ファイルに出力することです。
問題は、追加オプションを含むgitコマンドが正しく機能しないことです。だからコマンドが動作しますdiff
。動作しますが、動作しません。たとえば、オプションは機能しません。status
remote
remote show origin
r
e
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"
git
3つの引数、の値、-C
およびd
予想remote show origin
される5つの引数の代わりに(およびがremote
それぞれshow
置き換えorigin
られているremote show origin
)を確認します。
を使用してbash
引用符を削除するだけで問題が解決します。
git -C "$d" $COMMAND
Zshでは、次のように文字列を分割する必要があります。
git -C "$d" $=COMMAND