첫 번째 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과 같은 사용자 상호 작용 없이 실행됩니다.