bash 완료 도구가 설치되어 있습니다. 제가 달성하려는 특정 플래그 값 중 하나는 제3자 프로그램에 대한 외부 호출이 필요하며 이는 엄청나게 느립니다. 하지만 괜찮습니다. 모두 작동합니다. 일부 로컬 파일 캐싱을 추가하여 내 도구 사용자는 며칠에 한 번씩만 이 파일을 확인하면 됩니다.
문제는 느린 속도가 사용자에게 그다지 친숙해 보이지 않는다는 것입니다. 나는 사용자가 캐싱이 어떻게 작동하는지 알 필요가 없기를 바랍니다. 그러나 캐시가 더티되면 다시 작성하는 데 약 15초를 기다려야 합니다. 이 데이터를 로드하고 있음을 보여주기 위해 뭔가를 추가하고 싶습니다.
간단한 것을 추가하려고 시도했지만 echo "Querying <third party tool>..."
흥미롭게도 탭을 다시 클릭할 때까지 완료 결과가 실제로 나타나지 않는 것 같았습니다(아마도 캐시가 더러울 때만 에코되고 탭을 두 번째 클릭하면 캐시된 읽기에서 직접 시작되기 때문일 것입니다). ). stderr에 에코되도록 시도했지만 동일한 결과를 얻었습니다.
탭 로드가 완료되면 다른 도구에서 로드 아이콘이 표시되는 것을 본 적이 있습니다. gcloud
완료되면 표시된다는 점은 주목할 가치가 있습니다 --project
. 그러나 나는 그들이 어떻게 이것을 하는지에 대한 어떤 징후도 찾지 못했습니다.
답변1
답변2
몇 가지 실험 끝에 효과가 있는 것을 발견했습니다. 기본적으로 아이디어는 작성한 텍스트에 백스페이스를 입력하고 그 위에 공백을 쓴 다음 해당 텍스트에 백스페이스를 적용하는 것입니다(이스케이프는 \b
커서만 이동하지만 삭제하지는 않습니다).
이것이 gcloud 등이 텍스트 대신 단일 문자를 표시하는 이유이기도 합니다. 나는 Bash에서 무언가에 애니메이션을 적용하고 싶지 않았고 로딩을 나타내는 좋은 단일 문자를 보지 못했기 때문에 내가 한 일은 다음과 같습니다.
# \e[2m = dim, \e[0m = reset
echo -ne "\e[2mLoading...\e[0m"
# do the slow thing...
# same number of `\b` and ` ` as "Loading..."
echo -ne "\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b"
코드가 보기 흉한 것 외에는 발견된 문제가 없습니다.