ベースディレクトリの bash スクリプトユーザプロンプト

ベースディレクトリの bash スクリプトユーザプロンプト

最初の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 などのユーザー操作なしで実行されます。

関連情報