기본 디렉토리에 대한 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과 같은 사용자 상호 작용 없이 실행됩니다.

관련 정보