最初のbashスクリプトを試しています。複製されたリポジトリを保存する場所をユーザーに尋ねるメッセージを表示したいと思います。
現在はこのように割り当てています。
warpToLocation="${HOME}/apps/"
これを行う方法はありますか?
read -e -p "Enter the path to the file: " -i "${HOME}/apps/" FILEPATH
しかし、結果は次のように保存しますかwarpToLocation
?
編集する:
#!/bin/bash
echo "where would you like to install your repos?"
read -p "Enter the path to the file: " temp
warpToLocation="${HOME}/$temp/"
warpInLocations=("[email protected]:cca/toolkit.git" "[email protected]:cca/sms.git" "[email protected]:cca/boogle.git" "[email protected]:cca/cairo.git")
echo "warping in toolkit, sms, boogle and cairo"
for repo in "${warpInLocations[@]}"
do
warpInDir=$repo
warpInDir=${warpInDir#*/}
warpInDir=${warpInDir%.*}
if [ -d "$warpToLocation"]; then
echo "somethings in the way.. $warpInDir all ready exists"
else
git clone $repo $warpInDir
fi
done
そのエラーを得るために私がしたことは、あなたが私に与えたコードを追加することだけでした。
問題は、-e
(矢印で入力を編集できる)と-i
(プレビュー/代替回答)がbashバージョン4以降で実行され、バージョン2を実行していることですGNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
。
答え1
何が間違っていますか?
read -e -p "Enter the path to the file: " -i "${HOME}/apps/" warpToLocation
?
答え2
ユーザーにインタラクティブにパス名を尋ねることはほとんど建設的ではありません。これはスクリプトの有用性を対話的に制限し、ユーザーが(またはユーザーが使用したいすべてのもの)など$HOME
の$project_dir
変数名を使用できない場合に、潜在的に長いパス名を(正しく)入力するように強制します。~
。
代わりに、コマンドラインからターゲットディレクトリのパス名を取得してディレクトリであることを確認し、Gitリポジトリがまだない場合は、そのディレクトリに複製してください。
#!/bin/sh
destdir=$1
if [ ! -d "$destdir" ]; then
printf 'No such directory: %s\n' "$destdir" >&2
exit 1
fi
for repo in toolkit sms boggle cairo
do
if [ -e "$destdir/$repo" ]; then
printf 'Name %s already exists for repository %s (skipping)\n' \
"$destdir/$repo" "$repo" >&2
continue
fi
printf 'Cloning %s\n' "$repo"
git clone "[email protected]:cca/$repo.git" "$destdir/$repo"
done
このスクリプトは次のように使用されます。
./script.sh "$HOME/projects/stuff"
Ansible や Cron などのユーザー操作なしで実行されます。