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 及更高版本上运行,而我正在运行 version 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

以交互方式询问用户路径名很少有建设性。这将脚本的可用性限制为交互式使用,并强制用户(正确地)输入可能很长的路径名,而无法使用像$HOMEor $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。

相关内容