Bash에서 진행률 표시줄 만들기

Olorunfemi Akinlua 2023년6월20일
  1. pv 명령을 사용하여 Bash에서 진행률 표시줄 만들기
  2. dialog 명령을 사용하여 Bash에서 진행률 표시줄 만들기
  3. ncurses 라이브러리를 사용하여 Bash에서 진행률 표시줄 만들기
Bash에서 진행률 표시줄 만들기

진행률 표시줄은 오래 실행되는 스크립트 또는 명령과 같은 작업의 진행률을 보여주는 시각적 표시기입니다. 사용자에게 작업 상태에 대한 피드백을 제공하는 데 유용할 수 있으며 작업이 완료될 때까지 남은 시간을 추정하는 데에도 도움이 될 수 있습니다.

이 문서에서는 Linux 및 macOS용 기본 셸인 Bash의 셸 스크립트에 진행률 표시줄을 추가하는 몇 가지 방법을 살펴봅니다.

pv 명령을 사용하여 Bash에서 진행률 표시줄 만들기

셸 스크립트에 진행률 표시줄을 추가하는 가장 간단한 방법 중 하나는 파이프 뷰어를 나타내는 pv 명령을 사용하는 것입니다. 이 명령을 사용하면 터미널에서 진행률 표시줄을 표시하는 데 사용할 수 있는 파이프를 통해 전달되는 데이터의 진행률을 모니터링할 수 있습니다.

예를 들어 한 위치에서 다른 위치로 큰 파일을 복사하는 스크립트에 진행률 표시줄을 추가하려면 다음 명령을 사용할 수 있습니다.

cat file.txt | pv -s $(stat -c%s file.txt) > /destination/file.txt

이 명령은 cat을 사용하여 file.txt 파일의 내용을 읽고 출력을 pv 명령으로 파이프합니다. pv 명령은 -s 옵션을 사용하여 입력 데이터 크기를 바이트 단위로 지정하고 이 값을 기준으로 진행률을 계산합니다.

그런 다음 pv 명령의 출력이 대상 파일로 리디렉션됩니다.

스크립트가 실행될 때 pv 명령은 복사된 파일의 백분율과 작업이 완료될 때까지 남은 예상 시간을 보여주는 진행률 표시줄을 터미널에 표시합니다. 데이터가 전송되면 진행률 표시줄이 동적으로 업데이트되고 작업이 완료되면 사라집니다.

dialog 명령을 사용하여 Bash에서 진행률 표시줄 만들기

셸 스크립트에 진행률 표시줄을 추가하는 또 다른 방법은 터미널에서 사용자에게 친숙한 인터페이스를 만드는 유틸리티인 dialog 명령을 사용하는 것입니다. dialog 명령은 진행률 표시줄을 비롯한 다양한 위젯을 표시할 수 있으며 스크립트를 통해 제어하여 작업의 현재 진행률을 표시할 수 있습니다.

dialog 명령을 사용하여 셸 스크립트에 진행률 표시줄을 추가하려면 --gauge 옵션을 사용하여 새 진행률 표시줄 위젯을 만들 수 있습니다. --gauge 옵션은 위젯의 제목, 위젯의 높이와 너비, 진행률 표시줄의 초기 값을 포함하여 여러 인수를 사용합니다.

다음은 --게이지 옵션을 사용하여 제목이 파일 복사이고 초기 값이 0인 진행률 표시줄을 만드는 방법의 예입니다.

dialog --gauge "Copying file" 10 70 0

이 명령은 높이가 10줄이고 너비가 70자인 진행률 표시줄 위젯을 만들고 위젯 상단에 제목 파일 복사를 표시합니다. 진행률 표시줄은 처음에는 값이 0으로 비어 있습니다.

작업의 진행률과 진행률 표시줄의 값을 업데이트하려면 --title 옵션을 사용하여 위젯의 제목을 설정하고 --gauge-data 옵션을 사용하여 진행률 표시줄의 현재 값을 설정할 수 있습니다. 예를 들어 진행률 표시줄을 업데이트하여 50% 완료를 표시하려면 다음 명령을 사용할 수 있습니다.

dialog --title "Copying file" --gauge-data 50

이 명령은 위젯의 제목을 파일 복사 중으로 업데이트하고 진행률 표시줄의 값을 50으로 업데이트합니다. 진행률 표시줄은 새 값으로 다시 그려지고 사용자는 터미널에서 작업의 업데이트된 진행률을 볼 수 있습니다.

셸 스크립트에서 dialog 명령을 사용하려면 --and-widget 옵션을 사용하여 순서대로 실행해야 하는 위젯 명령 목록을 지정할 수 있습니다. 이렇게 하면 스크립트에서 진행률 표시줄을 만들고 업데이트할 수 있으며 위젯이 올바른 순서로 그려지고 업데이트되도록 할 수 있습니다.

다음은 dialog 명령을 사용하여 진행률 표시줄을 만들고 업데이트하는 셸 스크립트의 예입니다.

#!/bin/bash

# Create the progress bar widget
dialog --gauge "Copying file" 10 70 0

ncurses 라이브러리를 사용하여 Bash에서 진행률 표시줄 만들기

셸 스크립트에 진행률 표시줄을 추가하는 또 다른 방법은 터미널에서 사용자 친화적인 인터페이스를 만들기 위한 프로그래밍 라이브러리인 ncurses 라이브러리를 사용하는 것입니다. ncurses 라이브러리는 대화식 메뉴, 양식 및 기타 그래픽 사용자 인터페이스를 생성하기 위한 많은 기능과 위젯을 제공하며 쉘 스크립트에서 사용자 정의 진행률 표시줄을 생성하는 데 사용할 수 있습니다.

ncurses 라이브러리를 사용하여 쉘 스크립트에 진행률 표시줄을 추가하려면 initscr 기능을 사용하여 화면을 초기화하고 newwin 기능을 사용하여 진행률 표시줄에 대한 새 창을 만들 수 있습니다. newwin 함수는 창의 높이와 너비, 화면에서 창의 초기 위치를 포함하여 여러 인수를 사용합니다.

다음은 newwin 기능을 사용하여 화면의 위치(5,5)에서 높이 10줄과 너비 70자의 진행률 표시줄 창을 만드는 방법의 예입니다.

#!/bin/bash

# Initialize the screen
initscr

# Create the progress bar window
win=`newwin 10 70 5 5`

이 코드는 화면을 초기화하고 진행률 표시줄을 위한 새 창을 만듭니다. win 변수는 스크립트의 진행률 표시줄에 액세스하고 업데이트하는 데 사용할 수 있는 창을 참조합니다.

진행률 표시줄의 초기 상태를 그리려면 box 함수를 사용하여 창 주위에 상자를 그리고 mvwaddstr 함수를 사용하여 진행률 표시줄의 제목과 상자 안에 초기값 0%를 쓸 수 있습니다.

다음은 이러한 함수를 사용하여 진행률 표시줄의 초기 상태를 그리는 방법의 예입니다.

# Draw the box around the window
box $win 0 0

# Write the title and initial value of the progress bar
mvwaddstr $win 1 1 "Copying file"
mvwaddstr $win 1 30 "0%"

작업의 진행률과 진행률 표시줄의 값을 업데이트하려면 mvwaddstr 함수를 다시 사용하여 상자 안에 진행률 표시줄의 새 값을 쓸 수 있습니다. 예를 들어 진행률 표시줄을 업데이트하여 50% 완료를 표시하려면 다음 코드를 사용할 수 있습니다.

# Update the value of the progress bar
mvwaddstr $win 1 30 "50%"

이 코드는 진행률 표시줄의 기존 값을 새 값인 50%로 덮어씁니다. 진행률 표시줄이 새 값으로 다시 그려지고 사용자는 터미널에서 업데이트된 작업 진행률을 볼 수 있습니다.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn