Se realmente é realmente necessário ter personalizado cp
com mensagem personalizada, então recompilar o programa a partir da origem é o caminho a percorrer, mas uma abordagem um pouco mais sensata seria escrever sua própria mensagem via printf
de preferência , em vez de tentar interceptar a saída de cp
e manipular as opções do usuário por meio do diálogo select
. Além disso, se você estiver enviando mensagens de erro, elas devem ir para stderr
stream. Finalmente, *.*
é desnecessário e você pode usar apenas *
glob.
Abaixo está o script com algumas edições. Observe que você precisa descomentar a linha #cp "$item" "$HOMEWORKDIRECTORY"
para que a cópia real ocorra. Para fins de teste, substitua cp
por echo
primeiro.
#!/bin/bash
USAGE="Usage: ./script2.sh [hw-name]"
EINVALID="Invalid homework: $1"
SOURCEDIRECTORY="$PUBLIC/homework/$1"
HOMEWORKDIRECTORY="$HOME/homework/$1"
#COPY="$SOURCEDIRECTORY/*.*"
if [ -z "$1" ]; then
echo "$USAGE" > /dev/stderr
exit 1
fi
if [ ! -d "$SOURCEDIRECTORY" ]; then
echo "$EINVALID" > /dev/stderr
exit 2
fi
if [ ! -d "$HOMEWORKDIRECTORY" ]; then
echo "making homework1"
mkdir -p $HOMEWORKDIRECTORY
for item in "$SOURCEDIRECTORY"/*; do
skip=true
if [ -f "$HOMEWORKDIRECTORY"/"${item##*/}" ]; then
printf "%s already exists in %s.\n" "$item" "$HOMEWORKDIRECTORY"
select choice in "overwrite" "skip"; do
case "$choice" in
"overwrite") echo "Overwriting."
break;;
"skip") skip=true; break;;
esac
done
fi
if [ "$skip" = "true" ]; then
continue
fi
echo cp "$item" "$HOMEWORKDIRECTORY"
done