Bash로 Tmux 상태 표시줄을 100% 개선하세요
이 문서에 포함된 내용:
기사에 포함되지 않은 항목:
상태 표시줄에 유용한 정보를 표시하는 모듈식 Bash 스크립트를 만드는 방법을 보여 드리겠습니다. Tmux용으로 설치할 수 있는 플러그인이 많이 있지만 직접 엔지니어링하는 것은 매우 재미있습니다. 스크립트를 모듈식으로 만들기 위해 각 상태 표시줄 항목에 대해 별도의 함수를 생성하여 필요한 함수만 호출합니다.
다음은 기본 상태 표시줄입니다.
다음은 사용자 정의된 상태 표시줄입니다.
요구 사항
Tmux 버전을 확인하십시오. 저는 3.1버전을 사용하고 있습니다.
$ tmux -V
# Output
tmux 3.1c
.tmux.conf가 없으면 홈 디렉토리에 만드십시오.
$ touch .tmux.conf
.tmux.conf에 다음 줄이 있는지 확인하십시오.
# Status bar
set -g status on
set -g status-interval 1
set -g status-justify centre # Careful! It is spelled centre not center.
set -g status-style fg=white,bg=black
# Highlight the current window.
setw -g window-status-current-style fg=white,bg=red,bright
# Status Bar Left side
set -g status-left-length 50
set -g status-left-style default
set -g status-left "#h #( ~/.tmux/left_status.sh )"
# Status Bar Right side
set -g status-right-length 40
set -g status-right-style default
set -g status-right "#( ~/.tmux/right_status.sh )"
Bash 스크립트를 저장하려면 홈 디렉토리에 숨겨진 폴더를 만드십시오.
$ mkdir .tmux
두 개의 Bash 스크립트를 만듭니다. 하나는 왼쪽, 다른 하나는 오른쪽입니다.
$ touch ~/.tmux/right_status.sh
$ touch ~/.tmux/left_status.sh
스크립트는 현재 실행 가능하지 않습니다( rw-r--r-- ).
$ ls -lF ~/.tmux/*.sh
-rw-r--r-- 1 bw bw 0 Feb 19 18:44 /home/bw/.tmux/right_status.sh
-rw-r--r-- 1 bw bw 0 Feb 19 18:44 /home/bw/.tmux/left_status.sh
chmod 명령을 실행할 수 있도록 스크립트를 실행 가능하게 만드십시오.
$ chmod +x ~/.tmux/right_status.sh
$ chmod +x ~/.tmux/left_status.sh
이제 스크립트를 실행할 수 있습니다( rwxr-xr-x ).
$ ls -lF ~/.tmux/*.sh
-rwxr-xr-x 1 bw bw 0 Feb 19 18:44 /home/bw/.tmux/right_status.sh*
-rwxr-xr-x 1 bw bw 0 Feb 19 18:44 /home/bw/.tmux/left_status.sh*
상태 표시줄 왼쪽
먼저 left_status.sh 스크립트를 편집합니다. 다음 내용을 추가합니다. ip_address 함수는 IP 주소와 넷마스크를 표시합니다.
$ vim ~/.tmux/left_status.sh
#!/bin/bash
function ip_address() {
# Loop through the interfaces and check for the interface that is up.
for file in /sys/class/net/*; do
iface=$(basename $file);
read status < $file/operstate;
[ "$status" == "up" ] && ip addr show $iface | awk '/inet /{printf $2" "}'
done
}
IP 주소 기능 아래에 CPU 기능을 추가하십시오. 이것이 작동하려면 lm-sensors를 설치해야 합니다. 이 두 명령을 실행하십시오.
$ sudo apt install lm-sensors
$ sudo sensors-detect
출력을 보려면 센서 명령을 실행하십시오.
# Celcius
$ sensors
# Output
acpitz-acpi-0
Adapter: ACPI interface
temp1: +27.8°C (crit = +105.0°C)
temp2: +29.8°C (crit = +105.0°C)
# Fahrenheit
$ sensors -f
# Output
acpitz-acpi-0
Adapter: ACPI interface
temp1: +82.0°F (crit = +221.0°F)
temp2: +85.6°F (crit = +221.0°F)
ip_address 함수 아래에 cpu_temperature 함수를 추가합니다.
function cpu_temperature() {
# Display the temperature of CPU core 0 and core 1.
sensors -f | awk '/Core 0/{printf $3" "}/Core 1/{printf $3" "}'
}
메모리 사용량을 보기 위해 memory_usage 함수를 추가합니다. 사용된 메모리의 백분율을 계산하려면 bc 명령이 필요합니다.
bc 명령을 설치하십시오.
$ sudo apt install bc
스크립트에 memory_usage 함수를 추가합니다.
function memory_usage() {
if [ "$(which bc)" ]; then
# Display used, total, and percentage of memory using the free command.
read used total <<< $(free -m | awk '/Mem/{printf $2" "$3}')
# Calculate the percentage of memory used with bc.
percent=$(bc -l <<< "100 * $total / $used")
# Feed the variables into awk and print the values with formating.
awk -v u=$used -v t=$total -v p=$percent 'BEGIN {printf "%sMi/%sMi %.1f% ", t, u, p}'
fi
}
tun0 인터페이스를 확인하여 VPN이 가동되면 다음 기능이 표시됩니다.
function vpn_connection() {
# Check for tun0 interface.
[ -d /sys/class/net/tun0 ] && printf "%s " 'VPN*'
}
left_status.sh 스크립트를 완성하기 위해 메인 함수를 사용하여 다른 함수를 호출합니다.
function main() {
# Comment out any function you do not need.
ip_address
cpu_temperature
memory_usage
vpn_connection
}
# Calling the main function which will call the other functions.
main
상태 표시줄 오른쪽
이제 오른쪽을 구성해 보겠습니다.
$ vim ~/.tmux/right_status.sh
배터리 미터 기능은 배터리 수준을 표시하고 배터리 수준에 따라 색상을 변경합니다.
이를 위해서는 acpi 프로그램이 필요합니다.
$ apt install acpi
출력을 보려면 acpi를 실행하십시오.
$ acpi
# Output
Battery 0: Unknown, 96%
단말기에서 지원하는 경우emojis 상태 표시줄에 이모지를 추가할 수 있습니다.
배터리가 충전 중일 때 표시할 번개 모양 이모티콘을 추가하겠습니다.
Bash 스크립트에 battery_meter 함수를 추가합니다.
$ vim ~/.tmux/right_status.sh
#!/bin/bash
function battery_meter() {
if [ "$(which acpi)" ]; then
# Set the default color to the local variable fgdefault.
local fgdefault='#[default]'
if [ "$(cat /sys/class/power_supply/AC/online)" == 1 ] ; then
local icon='🗲'
local charging='+'
else
local icon=''
local charging='-'
fi
# Check for existence of a battery.
if [ -x /sys/class/power_supply/BAT0 ] ; then
batt0=$(acpi -b 2> /dev/null | awk '/Battery 0/{print $4}' | cut -d, -f1)
case $batt0 in
# From 100% to 75% display color grey.
100%|9[0-9]%|8[0-9]%|7[5-9]%) fgcolor='#[fg=brightgrey]'
;;
# From 74% to 50% display color green.
7[0-4]%|6[0-9]%|5[0-9]%) fgcolor='#[fg=brightgreen]'
;;
# From 49% to 25% display color yellow.
4[0-9]%|3[0-9]%|2[5-9]%) fgcolor='#[fg=brightyellow]'
;;
# From 24% to 0% display color red.
2[0-4]%|1[0-9]%|[0-9]%) fgcolor='#[fg=brightred]'
;;
esac
# Display the percentage of charge the battery has.
printf "%s " "${fgcolor}${icon}${charging}${batt0}%${fgdefault}"
fi
fi
}
스크립트에 추가할 다음 기능은 uptime 명령을 사용하여 로드 평균을 얻는 것입니다.
function load_average() {
printf "%s " "$(uptime | awk -F: '{printf $NF}' | tr -d ',')"
}
시간, 날짜 및 시간대를 보려면 Bash 스크립트에 date_time 함수를 추가하십시오.
function date_time() {
printf "%s " "$(date +'%Y-%m-%d %H:%M:%S %Z')"
}
마지막 함수는 다른 함수를 호출하는 주 함수입니다.
function main() {
battery_meter
load_average
date_time
}
# Calling the main function which will call the other functions.
main
완전한 스크립트
$ cat ~/.tmux/left_status.sh
#!/bin/bash
function ip_address() {
# Loop through the interfaces and check for the interface that is up.
for file in /sys/class/net/*; do
iface=$(basename $file);
read status < $file/operstate;
[ "$status" == "up" ] && ip addr show $iface | awk '/inet /{printf $2" "}'
done
}
function cpu_temperature() {
# Display the temperature of CPU core 0 and core 1.
sensors -f | awk '/Core 0/{printf $3" "}/Core 1/{printf $3" "}'
}
function memory_usage() {
if [ "$(which bc)" ]; then
# Display used, total, and percentage of memory using the free command.
read used total <<< $(free -m | awk '/Mem/{printf $2" "$3}')
# Calculate the percentage of memory used with bc.
percent=$(bc -l <<< "100 * $total / $used")
# Feed the variables into awk and print the values with formating.
awk -v u=$used -v t=$total -v p=$percent 'BEGIN {printf "%sMi/%sMi %.1f% ", t, u, p}'
fi
}
function vpn_connection() {
# Check for tun0 interface.
[ -d /sys/class/net/tun0 ] && printf "%s " 'VPN*'
}
function main() {
# Comment out any function you do not need.
ip_address
cpu_temperature
memory_usage
vpn_connection
}
# Calling the main function which will call the other functions.
main
$ cat ~/.tmux/right_status.sh
#!/bin/bash
function battery_meter() {
if [ "$(which acpi)" ]; then
# Set the default color to the local variable fgdefault.
local fgdefault='#[default]'
if [ "$(cat /sys/class/power_supply/AC/online)" == 1 ] ; then
local icon='🗲'
local charging='+'
else
local icon=''
local charging='-'
fi
# Check for existence of a battery.
if [ -x /sys/class/power_supply/BAT0 ] ; then
local batt0=$(acpi -b 2> /dev/null | awk '/Battery 0/{print $4}' | cut -d, -f1)
case $batt0 in
# From 100% to 75% display color grey.
100%|9[0-9]%|8[0-9]%|7[5-9]%) fgcolor='#[fg=brightgrey]'
;;
# From 74% to 50% display color green.
7[0-4]%|6[0-9]%|5[0-9]%) fgcolor='#[fg=brightgreen]'
;;
# From 49% to 25% display color yellow.
4[0-9]%|3[0-9]%|2[5-9]%) fgcolor='#[fg=brightyellow]'
;;
# From 24% to 0% display color red.
2[0-4]%|1[0-9]%|[0-9]%) fgcolor='#[fg=brightred]'
;;
esac
# Display the percentage of charge the battery has.
printf "%s " "${fgcolor}${charging}${batt0}%${fgdefault}"
fi
fi
}
function load_average() {
printf "%s " "$(uptime | awk -F: '{printf $NF}' | tr -d ',')"
}
function date_time() {
printf "%s" "$(date +'%Y-%m-%d %H:%M:%S %Z')"
}
function main() {
battery_meter
load_average
date_time
}
# Calling the main function which will call the other functions.
main
결론
이제 Bash 스크립트가 Tmux 상태 표시줄에 유용한 정보를 쉽게 표시하도록 할 수 있습니다. 이 기사를 읽으셨기를 바랍니다.
의견, 질문 및 제안을 자유롭게 남겨주세요.
Reference
이 문제에 관하여(Bash로 Tmux 상태 표시줄을 100% 개선하세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/brandonwallace/make-your-tmux-status-bar-100-better-with-bash-2fne
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#!/bin/bash
function ip_address() {
# Loop through the interfaces and check for the interface that is up.
for file in /sys/class/net/*; do
iface=$(basename $file);
read status < $file/operstate;
[ "$status" == "up" ] && ip addr show $iface | awk '/inet /{printf $2" "}'
done
}
$ sudo apt install lm-sensors
$ sudo sensors-detect
# Celcius
$ sensors
# Output
acpitz-acpi-0
Adapter: ACPI interface
temp1: +27.8°C (crit = +105.0°C)
temp2: +29.8°C (crit = +105.0°C)
# Fahrenheit
$ sensors -f
# Output
acpitz-acpi-0
Adapter: ACPI interface
temp1: +82.0°F (crit = +221.0°F)
temp2: +85.6°F (crit = +221.0°F)
function cpu_temperature() {
# Display the temperature of CPU core 0 and core 1.
sensors -f | awk '/Core 0/{printf $3" "}/Core 1/{printf $3" "}'
}
$ sudo apt install bc
function memory_usage() {
if [ "$(which bc)" ]; then
# Display used, total, and percentage of memory using the free command.
read used total <<< $(free -m | awk '/Mem/{printf $2" "$3}')
# Calculate the percentage of memory used with bc.
percent=$(bc -l <<< "100 * $total / $used")
# Feed the variables into awk and print the values with formating.
awk -v u=$used -v t=$total -v p=$percent 'BEGIN {printf "%sMi/%sMi %.1f% ", t, u, p}'
fi
}
function vpn_connection() {
# Check for tun0 interface.
[ -d /sys/class/net/tun0 ] && printf "%s " 'VPN*'
}
function main() {
# Comment out any function you do not need.
ip_address
cpu_temperature
memory_usage
vpn_connection
}
# Calling the main function which will call the other functions.
main
이제 오른쪽을 구성해 보겠습니다.
$ vim ~/.tmux/right_status.sh
배터리 미터 기능은 배터리 수준을 표시하고 배터리 수준에 따라 색상을 변경합니다.
이를 위해서는 acpi 프로그램이 필요합니다.
$ apt install acpi
출력을 보려면 acpi를 실행하십시오.
$ acpi
# Output
Battery 0: Unknown, 96%
단말기에서 지원하는 경우emojis 상태 표시줄에 이모지를 추가할 수 있습니다.
배터리가 충전 중일 때 표시할 번개 모양 이모티콘을 추가하겠습니다.
Bash 스크립트에 battery_meter 함수를 추가합니다.
$ vim ~/.tmux/right_status.sh
#!/bin/bash
function battery_meter() {
if [ "$(which acpi)" ]; then
# Set the default color to the local variable fgdefault.
local fgdefault='#[default]'
if [ "$(cat /sys/class/power_supply/AC/online)" == 1 ] ; then
local icon='🗲'
local charging='+'
else
local icon=''
local charging='-'
fi
# Check for existence of a battery.
if [ -x /sys/class/power_supply/BAT0 ] ; then
batt0=$(acpi -b 2> /dev/null | awk '/Battery 0/{print $4}' | cut -d, -f1)
case $batt0 in
# From 100% to 75% display color grey.
100%|9[0-9]%|8[0-9]%|7[5-9]%) fgcolor='#[fg=brightgrey]'
;;
# From 74% to 50% display color green.
7[0-4]%|6[0-9]%|5[0-9]%) fgcolor='#[fg=brightgreen]'
;;
# From 49% to 25% display color yellow.
4[0-9]%|3[0-9]%|2[5-9]%) fgcolor='#[fg=brightyellow]'
;;
# From 24% to 0% display color red.
2[0-4]%|1[0-9]%|[0-9]%) fgcolor='#[fg=brightred]'
;;
esac
# Display the percentage of charge the battery has.
printf "%s " "${fgcolor}${icon}${charging}${batt0}%${fgdefault}"
fi
fi
}
스크립트에 추가할 다음 기능은 uptime 명령을 사용하여 로드 평균을 얻는 것입니다.
function load_average() {
printf "%s " "$(uptime | awk -F: '{printf $NF}' | tr -d ',')"
}
시간, 날짜 및 시간대를 보려면 Bash 스크립트에 date_time 함수를 추가하십시오.
function date_time() {
printf "%s " "$(date +'%Y-%m-%d %H:%M:%S %Z')"
}
마지막 함수는 다른 함수를 호출하는 주 함수입니다.
function main() {
battery_meter
load_average
date_time
}
# Calling the main function which will call the other functions.
main
완전한 스크립트
$ cat ~/.tmux/left_status.sh
#!/bin/bash
function ip_address() {
# Loop through the interfaces and check for the interface that is up.
for file in /sys/class/net/*; do
iface=$(basename $file);
read status < $file/operstate;
[ "$status" == "up" ] && ip addr show $iface | awk '/inet /{printf $2" "}'
done
}
function cpu_temperature() {
# Display the temperature of CPU core 0 and core 1.
sensors -f | awk '/Core 0/{printf $3" "}/Core 1/{printf $3" "}'
}
function memory_usage() {
if [ "$(which bc)" ]; then
# Display used, total, and percentage of memory using the free command.
read used total <<< $(free -m | awk '/Mem/{printf $2" "$3}')
# Calculate the percentage of memory used with bc.
percent=$(bc -l <<< "100 * $total / $used")
# Feed the variables into awk and print the values with formating.
awk -v u=$used -v t=$total -v p=$percent 'BEGIN {printf "%sMi/%sMi %.1f% ", t, u, p}'
fi
}
function vpn_connection() {
# Check for tun0 interface.
[ -d /sys/class/net/tun0 ] && printf "%s " 'VPN*'
}
function main() {
# Comment out any function you do not need.
ip_address
cpu_temperature
memory_usage
vpn_connection
}
# Calling the main function which will call the other functions.
main
$ cat ~/.tmux/right_status.sh
#!/bin/bash
function battery_meter() {
if [ "$(which acpi)" ]; then
# Set the default color to the local variable fgdefault.
local fgdefault='#[default]'
if [ "$(cat /sys/class/power_supply/AC/online)" == 1 ] ; then
local icon='🗲'
local charging='+'
else
local icon=''
local charging='-'
fi
# Check for existence of a battery.
if [ -x /sys/class/power_supply/BAT0 ] ; then
local batt0=$(acpi -b 2> /dev/null | awk '/Battery 0/{print $4}' | cut -d, -f1)
case $batt0 in
# From 100% to 75% display color grey.
100%|9[0-9]%|8[0-9]%|7[5-9]%) fgcolor='#[fg=brightgrey]'
;;
# From 74% to 50% display color green.
7[0-4]%|6[0-9]%|5[0-9]%) fgcolor='#[fg=brightgreen]'
;;
# From 49% to 25% display color yellow.
4[0-9]%|3[0-9]%|2[5-9]%) fgcolor='#[fg=brightyellow]'
;;
# From 24% to 0% display color red.
2[0-4]%|1[0-9]%|[0-9]%) fgcolor='#[fg=brightred]'
;;
esac
# Display the percentage of charge the battery has.
printf "%s " "${fgcolor}${charging}${batt0}%${fgdefault}"
fi
fi
}
function load_average() {
printf "%s " "$(uptime | awk -F: '{printf $NF}' | tr -d ',')"
}
function date_time() {
printf "%s" "$(date +'%Y-%m-%d %H:%M:%S %Z')"
}
function main() {
battery_meter
load_average
date_time
}
# Calling the main function which will call the other functions.
main
결론
이제 Bash 스크립트가 Tmux 상태 표시줄에 유용한 정보를 쉽게 표시하도록 할 수 있습니다. 이 기사를 읽으셨기를 바랍니다.
의견, 질문 및 제안을 자유롭게 남겨주세요.
Reference
이 문제에 관하여(Bash로 Tmux 상태 표시줄을 100% 개선하세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/brandonwallace/make-your-tmux-status-bar-100-better-with-bash-2fne
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#!/bin/bash
function ip_address() {
# Loop through the interfaces and check for the interface that is up.
for file in /sys/class/net/*; do
iface=$(basename $file);
read status < $file/operstate;
[ "$status" == "up" ] && ip addr show $iface | awk '/inet /{printf $2" "}'
done
}
function cpu_temperature() {
# Display the temperature of CPU core 0 and core 1.
sensors -f | awk '/Core 0/{printf $3" "}/Core 1/{printf $3" "}'
}
function memory_usage() {
if [ "$(which bc)" ]; then
# Display used, total, and percentage of memory using the free command.
read used total <<< $(free -m | awk '/Mem/{printf $2" "$3}')
# Calculate the percentage of memory used with bc.
percent=$(bc -l <<< "100 * $total / $used")
# Feed the variables into awk and print the values with formating.
awk -v u=$used -v t=$total -v p=$percent 'BEGIN {printf "%sMi/%sMi %.1f% ", t, u, p}'
fi
}
function vpn_connection() {
# Check for tun0 interface.
[ -d /sys/class/net/tun0 ] && printf "%s " 'VPN*'
}
function main() {
# Comment out any function you do not need.
ip_address
cpu_temperature
memory_usage
vpn_connection
}
# Calling the main function which will call the other functions.
main
#!/bin/bash
function battery_meter() {
if [ "$(which acpi)" ]; then
# Set the default color to the local variable fgdefault.
local fgdefault='#[default]'
if [ "$(cat /sys/class/power_supply/AC/online)" == 1 ] ; then
local icon='🗲'
local charging='+'
else
local icon=''
local charging='-'
fi
# Check for existence of a battery.
if [ -x /sys/class/power_supply/BAT0 ] ; then
local batt0=$(acpi -b 2> /dev/null | awk '/Battery 0/{print $4}' | cut -d, -f1)
case $batt0 in
# From 100% to 75% display color grey.
100%|9[0-9]%|8[0-9]%|7[5-9]%) fgcolor='#[fg=brightgrey]'
;;
# From 74% to 50% display color green.
7[0-4]%|6[0-9]%|5[0-9]%) fgcolor='#[fg=brightgreen]'
;;
# From 49% to 25% display color yellow.
4[0-9]%|3[0-9]%|2[5-9]%) fgcolor='#[fg=brightyellow]'
;;
# From 24% to 0% display color red.
2[0-4]%|1[0-9]%|[0-9]%) fgcolor='#[fg=brightred]'
;;
esac
# Display the percentage of charge the battery has.
printf "%s " "${fgcolor}${charging}${batt0}%${fgdefault}"
fi
fi
}
function load_average() {
printf "%s " "$(uptime | awk -F: '{printf $NF}' | tr -d ',')"
}
function date_time() {
printf "%s" "$(date +'%Y-%m-%d %H:%M:%S %Z')"
}
function main() {
battery_meter
load_average
date_time
}
# Calling the main function which will call the other functions.
main
이제 Bash 스크립트가 Tmux 상태 표시줄에 유용한 정보를 쉽게 표시하도록 할 수 있습니다. 이 기사를 읽으셨기를 바랍니다.
의견, 질문 및 제안을 자유롭게 남겨주세요.
Reference
이 문제에 관하여(Bash로 Tmux 상태 표시줄을 100% 개선하세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/brandonwallace/make-your-tmux-status-bar-100-better-with-bash-2fne텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)