У меня есть следующий отрывок из сценария для поиска определенных вложенных папок. Тем временем спиннер показывает, что что-то занимает больше времени в фоне:
# runs find as background task and meanwhile display spinner
# writes to temp file ./.repos
echo -ne "Scanning for .git folders ... "
find -name ".git" -type d > .repos &
pid=$!
while [ -d /proc/$pid ]
do
for x in '-' '/' '|' '\'
do
echo -ne "\b"$x
sleep 0.01
done
done
# read-in result from ./.repos and delete the file
echo ""
repos=$(cat .repos)
rm .repos
Это хорошо и все такое, но мне не нравится запись/чтение в/из файла только для того, чтобы получить список найденных папок.
Поэтому мой вопрос: Как я могу сделать это непосредственно как переменную?
Я пробовал что-то вроде
echo -ne "Scanning for .git folders ... "
repos=$(find -name ".git" -type d &
pid=$!
while [ -d /proc/$pid ]
do
for x in '-' '/' '|' '\'
do
echo -ne "\b"$x
sleep 0.01
done
done
)
echo "$repos"
но это не сработало, то есть спиннер не выводился, а в конце добавлялся к строке в $repos
.
Тогда я решил, что понял проблему и попробовал
echo -ne "Scanning for .git folders ... "
repos=$(find -name ".git" -type d) &
pid=$!
while [ -d /proc/$pid ]
do
for x in '-' '/' '|' '\'
do
echo -ne "\b"$x
sleep 0.01
done
done
echo "$repos"
теперь спиннер работает как ожидалось, но в итоге $repos
пуст
Это должно соответствовать вашим потребностям:
echo -ne "Scanning for .git folders ... "
(
while :; do
for x in '-' '/' '|' '\\'
do
echo -ne "\b"$x
sleep 0.01
done
done
) &
sub=$!
repos=$(find -name ".git" -type d)
kill $sub
echo -ne "\nFound repos: "
echo "$repos" | wc -l
Возможно, проще сделать наоборот.