이 질문은 며칠 동안 귀찮게 해 왔으며 여기에 내가 배운 모든 자료가 담긴 편집 된 게시물이 있습니다. 특히, 내 목표는 BASH에서 프롬프트 옆에 시계를 표시하는 것입니다. 그의 대답에서 언급 한 Radu Radeanu와 마찬가지로 핵심은 화면을 방해하지 않고 입력하거나 입력하는 것과 상관없이 명령 프롬프트를 지속적으로 새로 고치거나 화면을 다시 그릴 수있는 기능이나 변수를 찾는 것입니다. G_P에 표시된 것처럼 while 루프를 사용하면 달성 할 수 있지만 tput 기능을 사용하여 화면을 계속 다시 그리면 화면에 텍스트가 새로 고쳐지는 즉시 엉망이됩니다. G_P가 게시 한 코드를 약간 수정하여 OP가 요청한 것을 달성하는 데 거의 다가 갔지만 여전히 Radu의 답변이 OP가 원하는 것에 가장 가깝다고 생각합니다. 더 이상 고민하지 않으면 여기에 내가 몇 가지가 있습니다.
# 1, 내가 선호하는 솔루션 : Terminal Multiplexer
터미널 멀티플렉서는 터미널 화면을 둘 이상의 화면으로 분할 할 수있는 소프트웨어입니다. 특히 Byobu 터미널에 주목하고 싶습니다. 이 ncurses 기반 터미널 에뮬레이터를 사용하면 시간, CPU 백분율, 메모리 및 기타 여러 표시기를 표시 할 수 있습니다. 내 byobu 터미널의 스크린 샷에서 CPU 온도, 배터리 비율, 인터넷 연결 품질, CPU 주파수, RAM, 날짜 및 코스 시간을 볼 수 있습니다. 터미널에있는 동안 이러한 것들을 지속적으로 모니터링하는 데 관심이 있다면 Byobu가 갈 길입니다. 사실, 나는 그것을 너무 좋아하여 tty에 로그인하는 동안 자동으로로드되도록 설정했습니다. 유일한 단점은 tty에서 실제로 별도의 창을 병합 할 수 없다는 것입니다 .F3 및 F4 키가있는 탭 만 전환하십시오.
멀티플렉싱 창과 관련된 대체 솔루션 splitvt
은 화면을 두 부분으로 나누는를 사용 하는 것입니다. 와 같은 터미널 시계를 실행 tty-clock
하거나 날짜와 함께 watch 명령을 사용하거나 스크립트를 사용하여 직접 코딩 할 수 있습니다. 나중에 더 자세히. 스크린 샷에서 정상 bash 프롬프트가있는 분할의 한 부분을 볼 수 있으며 아래쪽에서 스크립트가 실행중인 것을 볼 수 있습니다.이 스크립트는 date
명령으로 clear
명령 출력을 지속적으로 새로 고칩니다 .
# 2, While Do Loop and tput
이것은 아마도 질문을 한 사람이 bash로 구현하기를 원하는 것과 가장 가까운 것입니다.
G_P는 while do
and tput
명령 과 관련된 훌륭한 솔루션을 게시했습니다 . 그러나 G_P의 코드에는 내가 싫어하는 두 가지가있었습니다. 하나, 시계는 프롬프트의 오른쪽에 있었고, 두 번째는 – 수면주기가 1 초이기 때문에 (잠자기라고 표시된 원래 코드 참조) 화면이 1 초마다 다시 그려지고 출력이 엉망이됩니다. 내가 한 일은 \ n 연산자로 bash 프롬프트를 한 줄 아래로 편집하고 t_t 연산자가 프롬프트 바로 위에 시계를 배치하고 60 초마다 새로 고치도록 G_P 코드를 변경하는 것입니다. 시계의 루프가 화면을 엉망으로 만드는 동안 시간과 분을 볼 수 있습니다 (그리고 정확히 분을 신경 쓰지 않습니다). 먼저 여기 내 프롬프트가 있습니다.
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
다음은 G_P의 수정 된 코드입니다. enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
작은 편집 : 위의 코드가 때로는 시계를 즉시 가져 오지 않는 것으로 나타났습니다. 더 나은 버전이 있습니다. while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
이것은 먼저 화면에 시계를 놓은 다음 bash에게 60 초의 수면 사이클을 거치게합니다.
tput cup 0 0은 시계를 화면의 오른쪽 상단 모서리에 놓고 프롬프트 바로 위와 sleep 60을 60 초로 변경합니다. 이렇게하면 매 초가 아닌 시간과 분만 모니터링 할 수 있기 때문입니다. 이렇게하면 화면에 내가 가진 텍스트가 대부분 영향을받지 않습니다 (시계를 새로 고치는 것과 같은 시간에 명령을 실행할 때만).
PS1 라인은 이미 .bashrc 프로파일에 있으므로 조금만 조정하면됩니다. while do 루프는 같은 파일의 어딘가에 추가되어야합니다.이 주석은 처음에 추가 한 것입니다. bubu를 만들고 원래 상태로 돌아 가야 할 경우를 대비하여 항상 파일을 백업하는 것을 잊지 마십시오.
# 3, 스크립팅 및 기타
이 부분은 단지 시간을 보려는 사람들을위한 것입니다. 지속적으로 모니터링하려는 경우 # 1과 # 2가 선호되는 옵션입니다.
우리가 이미 보았 듯이 while do 루프는 매우 유용합니다. while do 루프, 날짜 및 절전 명령으로 시계를 만드는 방법은 다음과 같습니다.
리턴 / 엔터를 누르면 기본적으로 매초마다 지워진 화면에 날짜 명령 출력이 표시됩니다. 매번 모든 것을 입력하고 싶지 않으면이 모든 것을 스크립트로 바꾸십시오.
#!/bin/bash
while true
do
clear;date
sleep 1
done
이제 bash의 한 인스턴스에서 splitvt를 사용하여 다른 스크립트에서 작업 할 수 있습니다.
또 다른 해결책은 watch -n1 date
command이며, 이것은 1 초의 기간으로 date 명령을 지속적으로 실행합니다.
결론 : 나는이 질문에 대한 답을 찾으려고하면서 몇 가지를 배웠으며, 그 결과가 어떤 식 으로든 도움이되기를 바랍니다.이 질문에 기여할 수 있기를 바랍니다. Byobu 터미널 IMHO는 최고의 솔루션이지만 직접 결정하고 조사하고 자신에게 가장 적합한 방법을 선택하십시오.
내가 조사하는 동안 발견 한 것들 중 일부 :
내 원래 게시물, 최소한의 솔루션 : ~ / .bashrc 파일을 편집하십시오. 나노로 편집하는 것을 선호하므로
nano ~/.bashrc
내가 편집 한 파일의 일부는 다음과 같습니다.
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'
else
# PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi
else statement 후 첫 번째 줄은 #으로 주석 처리됩니다 (이것은 이전 프롬프트입니다). 이제 두 번째 줄은 원하는 것 \t
입니다. 특히 연산자입니다. 실행 시간이 24 시간 형식으로 표시됩니다. 더 많은 정보를 원하시면 이것을 확인 하십시오 . 또한 작은 메모, 나는 채색 된 프롬프트를 사용하지 않기 때문에 나중에 물건을 사용하고 있습니다.
추신 : 내 답변에 아무것도 추가하거나 어떤 식 으로든 편집 해야하는지 알려주십시오. 그러나 대부분 이것이 내가 결정할 수있는 가장 결정적인 답변이라고 생각합니다. 적어도 개인적으로 아무것도 추가하지 않을 것입니다 그것에 새로운.
$PS1
시간을 갖도록 (프롬프트) 변수 를 설정할 수 있지만 변경 여부는 확실하지 않습니다.