기본적으로 데이터베이스에서 데이터를 가져오는 동안 표시할 진행 휠을 스크립트에 추가하려고 합니다.
결과를 에코한 다음 결과 변수에 결과를 저장하는 일반 데이터베이스 함수를 호출합니다. 백그라운드에 두고 PID를 가져온 다음 이를 스피너 대기에서 사용할 수 있는 방법이 있나요?
loading_wheel(){
local process_id="$1"
spin[0]="-"; spin[1]="\\"; spin[2]="|"; spin[3]="/"
echo -n "[ Working ] ${spin[0]}"
while kill -0 $process_id 2> /dev/null
do
for i in "${spin[@]}"
do
echo -ne "\b$i"
sleep 0.1
done
done
echo ""
}
# This is the command I want to background and use whilst still populating the variable.
result=$(get_db_val "$conn" "select 'test' from dual;")
# An example that works but no variable or subshell.
sleep 10 & PID=$!
loading_wheel "$PID"
답변1
foo=$(some_value_of_bar_that_takes_a_while) &
; 와 같은 구성을 사용하여 하위 쉘의 배경을 지정하고 해당 출력을 신뢰할 수 있는 변수로 캡처할 수 없습니다. 이 제한 사항을 해결해야 합니다. 간결함을 위해:
loading_wheel() {
# is defined here
}
scratch=$(mktemp); trap "rm -f $scratch" EXIT
get_db_val "$conn" "select 'test' from dual;" > $scratch &
loading_wheel $!
result="$( cat scratch )"