명령 프롬프트 전에 터미널에 실행 시계를 표시하는 방법


40

나는 터미널을 사용하고 대부분의 시간을 터미널을 사용하는 것을 선호합니다. 병렬로 사용하는 동안 터미널에서 시간을 보는 방법을 찾고 있습니다. 시간이 지나면 자동으로 변경됩니다. 명령 프롬프트에 왼쪽이 표시되면 멋질 것입니다.

이것이 터미널의 명령 프롬프트 인 경우 :

saurav@saurav-P4I45Gx-PE:~$

그런 다음 clock (time)을 다음과 같이보고 싶습니다.

saurav@saurav-P4I45Gx-PE[06:27:01]:~$

또는

saurav@(06:27:01):~$

또는 다른 형식. 06:27:01시간은 어디입니까 내가 원하는 것은 초가 지나면 변경되는 시간을 보여주는 것입니다.

그래서 이것을 달성 할 수있는 방법이 있습니까?


$PS1시간을 갖도록 (프롬프트) 변수 를 설정할 수 있지만 변경 여부는 확실하지 않습니다.
kiri

을 지정할 수 \@있지만 프롬프트가 표시 될 때마다 현재 시간이 아닌 시간 만 다시 계산됩니다.
kiri

2
@muru, 내 질문에서 지정한 것처럼 그 대답은 bash가 아닌 zsh에서만 작동합니다.
Rosh_Th

2
그러나 질문 자체는 zsh (일반)에 관한 것이 아니므로 G_P에게 답변을 게시하도록 조언했습니다. 이제 G_P의 답변이 거기에 추가되면 속임수로 인정됩니다.
muru

1
@muru 다른 질문은 특히 프롬프트에서 시간을 원합니다. 여기서 OP는 터미널에 인쇄되기를 원하며 프롬프트에 있어야한다고 지정하지 않습니다.
terdon

답변:


74

기본 bash 쉘을 사용 하여이 작업을 수행하는 것이 너무 간단하다는 것은 확실하지 않습니다 (그러나 불가능하다는 것은 아닙니다). 프롬프트에서 입력하는 것을 방해하지 않고 매초마다 명령 프롬프트를 새로 고칠 수있는 명령 / 기능이 필요할 것입니다.

Z 쉘 (zsh을이) 가 내장되어라는 명령을 zle함께 사용하는 경우, reset-prompt인수, 힘이 프롬프트가 다시 확대 될 다음 편집 버퍼를 다시 표시합니다.

시도해 보려면 다음 단계를 수행하십시오.

  1. 이 명령으로 Z 쉘을 설치하십시오.

    sudo apt-get install zsh
    
  2. 당신이 실행하면 zsh처음 선택 0당신이 묻는 메시지가 나타나면.

  3. ~/.zshrc파일을 편집하고 다음 행을 추가하십시오.

    setopt PROMPT_SUBST
    PROMPT='%B%F{red}%n@%m%f%F{yellow}[%D{%L:%M:%S}]%f:%F{blue}${${(%):-%~}}%f$ %b'
    TMOUT=1
    
    TRAPALRM() {
        zle reset-prompt
    }
    

    파일을 저장하고 닫습니다.

  4. 터미널에서 여전히 zsh를 사용중인 경우을 실행 source ~/.zshrc하거나 간단히을 사용 zsh하여 프롬프트를 재설정하십시오. 이제 프롬프트가 다음과 같아야합니다.

    saurav@saurav-P4I45Gx-PE[1:25:21]:~$
    

    일부 색상으로.

  5. 원하는 경우 chsh -s /bin/zsh현재 셸을 다음 으로 변경하여 실행 합니다 /bin/zsh(이 변경 사항을 적용하려면 다시 로그인해야 함).

  6. exitzsh 쉘을 종료하려면 실행하십시오 .

내 터미널에서 15 초의 스크린 캐스트가 있습니다.

명령 프롬프트 전에 터미널에서 클럭을 실행


4
스크린 캐스트 보너스 포인트. 정말 멋진 물건.
MadMike

@SauravKumar chsh기본 쉘을에서 /bin/bash로 변경하려면 실행하십시오 /bin/zsh. 로그 아웃했다가 다시 로그인해야합니다.
Radu Rădeanu

실제로 만들었습니다. 그러나 매번 터미널이 열리면 zsh이 시계 모드로 들어가는 명령을 실행 해야합니다.
Saurav Kumar

@ RaduRădeanu : 예, 로그인 후 다시 시작했을뿐입니다 .. 훌륭합니다 .. Jai Ho !! : P
Saurav Kumar

이것은 나를 위해 작동하지 않습니다. 1 초 후에 터미널을 닫습니다. 나는 Linux Mint에 있지만 여전히 zsh를 사용하기 때문에 그것이 중요하지 않다고 생각했습니다. 어떤 아이디어?
istrasci

28

터미널에 실행 시간을 표시하려면이 명령을 사용할 수 있습니다. 터미널의 오른쪽 상단에 시간이 표시됩니다.

  while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-11));echo -e "\e[31m`date +%r`\e[39m";tput rc;done &

여기에 이미지 설명을 입력하십시오

그러나이 명령을 사용하여 시간을 표시하면 터미널에있는 텍스트가 때때로 겹쳐 질 수 있습니다. 따라서이 명령을주의해서 사용하십시오.

다른 방법 은 PS1에서 제어 문자를 사용 하는 것일 수 있습니다.

[guru@guru-pc ~]$  PS1='\[\u@\h \T \w]\$'

[guru@guru-pc 11:06:16 ~]$

그러나이 방법에서는 Enter 키를 누른 후에 만 ​​시간이 새로 고쳐집니다.

위의 방법을 영구적으로 사용하려면 파일에 위의 명령 (원하는 또는 둘 다)을 추가하십시오 ~.bashrc.


큰! 시계의 색상을 변경하는 방법에 대한 단서가 있습니까?
미적분학 기사

1
@CalculusKnight, 명령에서 색상 코드를 변경할 수 있습니다. 색상 코드에 대해 이것을 참조 할 수 있습니다. misc.flogisoft.com/bash/tip_colors_and_formatting
g_p

1
이것은 완벽하게 작동합니다-대단히 감사합니다. 지나치게 능동적 인 방화벽이 유휴 SSH 연결을 종료하는 것을 막기 위해 .bashrc에서 호출합니다.
Criggie

11

시계를 표시하기 만하면됩니다 date.

while :; do date +%r; sleep 1 ; done

로 종료 할 때까지 매초마다 시간이 표시됩니다 CtrlC. 동일한 줄에 있기를 원하면 (위의 내용이 매 초마다 새 줄을 인쇄합니다) 대신 다음을 수행하십시오.

while :; do printf '%s\r' "$(date +%r)"; sleep 1 ; done

2

이 질문은 며칠 동안 귀찮게 해 왔으며 여기에 내가 배운 모든 자료가 담긴 편집 된 게시물이 있습니다. 특히, 내 목표는 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 키가있는 탭 만 전환하십시오.

내 o 부 터미널의 스크린 샷

멀티플렉싱 창과 관련된 대체 솔루션 splitvt은 화면을 두 부분으로 나누는를 사용 하는 것입니다. 와 같은 터미널 시계를 실행 tty-clock하거나 날짜와 함께 watch 명령을 사용하거나 스크립트를 사용하여 직접 코딩 할 수 있습니다. 나중에 더 자세히. 스크린 샷에서 정상 bash 프롬프트가있는 분할의 한 부분을 볼 수 있으며 아래쪽에서 스크립트가 실행중인 것을 볼 수 있습니다.이 스크립트는 date명령으로 clear명령 출력을 지속적으로 새로 고칩니다 .

여기에 이미지 설명을 입력하십시오

# 2, While Do Loop and tput 이것은 아마도 질문을 한 사람이 bash로 구현하기를 원하는 것과 가장 가까운 것입니다.

G_P는 while doand 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 datecommand이며, 이것은 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 시간 형식으로 표시됩니다. 더 많은 정보를 원하시면 이것을 확인 하십시오 . 또한 작은 메모, 나는 채색 된 프롬프트를 사용하지 않기 때문에 나중에 물건을 사용하고 있습니다.

추신 : 내 답변에 아무것도 추가하거나 어떤 식 으로든 편집 해야하는지 알려주십시오. 그러나 대부분 이것이 내가 결정할 수있는 가장 결정적인 답변이라고 생각합니다. 적어도 개인적으로 아무것도 추가하지 않을 것입니다 그것에 새로운.


1
OP가 원하는대로 '실행 중'시계가 표시되지 않습니다. 터미널 프롬프트에 시간이 추가됩니다.
Parto

2
export PS1='\t$'

내가 터미널 i에서 가능한 약간의 배경 정보로 표시 선호하기 때문에 일반적으로 모든 세션을 사용자 정의 #, $등 (당신이 영구적으로 변경하려면, minerz029의 솔루션은 완벽)

현재를 표시하도록 수정하려면

export PS1='\T$'

12 시간 형식으로 다른 옵션에 대한 bash 문서를 볼 수 있습니다.


1

이번에는 새 프롬프트가 실행될 때만 변경됩니다

에 다음을 추가 할 수 있습니다 .bashrc.

export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:[\t]:\w\$ "

어떤 생산 :

USER@HOST:[12:59:59]:~$ _

자세한 내용은 여기 : http://www.thegeekstuff.com/2008/09/bash-shell-ps1-10-examples-to-make-your-linux-prompt-like-angelina-jolie/#8

위 페이지에서 "8. PS1 변수에 사용 가능한 코드를 사용하여 프롬프트를 작성하십시오"를 검색하십시오.


2
귀하의 시간과 노력에 감사드립니다. 그러나 이것은 내가 원하는 것이 아닙니다 ..
Saurav Kumar

@SauravKumar 네, 당신은 달리기 시계 를 원한다는 것을 이해합니다 . 'PS1'변수를 사용하여 가능한지 확실하지 않으며, $PROMPT_COMMAND똑딱 거리는 시간을 표시하는 명령을 찾을 수 있을 것입니다.
kiri

글쎄, 나는 당신이 이것을 할 수 있다고 생각합니다 .. :) 그것은 당신이 해결책에 가까이 도달 한 것 같습니다 ..
Saurav Kumar

\ u를 두 번 포함합니까? @SauravKumar
David

@David : 죄송합니다. 모르겠습니다. 그러나 @ minerz029는 아마도 귀하의 질문에 대답 할 것입니다. :)
Saurav Kumar

1

-key로 트리거되는 ncmpcpp 시계 기능이 정말 마음에 듭니다0 (스크린 샷 참조). 설치 절차에 대한 자세한 내용은이 게시물을 참조하십시오 .

여기에 이미지 설명을 입력하십시오


1
watch -t -n1 "date +%T|figlet" 쉬운 방법이 될 것입니다.
g_p

1

g_pSerg의 영향을 받아 bash에서 함수를 만들려고했습니다. 작동하지만 bash가 fg 프로세스인지 여부를 확인하기 위해 매초 ps 명령을 확인하는 것이 좋습니다.

prompttime() {
  PSCOLGREEN="\[$(tput setaf 2)\]"
  PSCOLRESET="\[$(tput sgr0)\]"
  PS1="${PSCOLGREEN}\\$ ${PSCOLRESET}[--:--:-- \W] "
  [ "$PROMPTCURRTTY" ] || {
    PROMPTCURRTTYtemp=$(tty)
    PROMPTCURRTTY=${PROMPTCURRTTYtemp//\/dev\//}
    unset PROMPTCURRTTYtemp; }
  PROMPTSTATE="[S]s+"
  while :; do
    sleep 1
    [ "$(ps a | grep "${PROMPTCURRTTY}.*${PROMPTSTATE}.*$(basename $SHELL)")" ] &&
    { tput sc
      tput hpa 3
      echo -en "$(date +%T)"
      tput rc; }
    continue
  done&
}

0

사용할 필요가 없으면 debian_chroot다음 을 사용 하여 명령 프롬프트가 표시된 시간을 저장하는 편리한 장소입니다.

export PROMPT_COMMAND='debian_chroot=$(date +%r)'

터미널에 이것을 입력하고 시간이 지남에 따라 명령 프롬프트가 변경되는 것을보십시오.

rick@alien:~$ export PROMPT_COMMAND='debian_chroot=$(date +%r)'

(09:14:59 PM)rick@alien:~$ 

시간이 한 번 설정된 후 매 초마다 업데이트되는 실행 시계를 얻으려면 다음을 수행하십시오.

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &

다음 .gif은 작동중인 명령을 보여줍니다.

시간 터미널 prompt.gif

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.