그리고

그리고

마지막 bash 명령과 해당 타임스탬프를 인쇄하고 싶습니다. history 1기록 명령 자체를 표시합니다. 이 기능은 많은 컴퓨터에서 사용해야 하므로 사용자 정의 구성에 의존해서는 안 됩니다. 예를 들어 이 작업을 수행하는 몇 가지 간단한 명령이 확실히 누락되었습니다 lastcmd. :)

fc -l -1타임스탬프 없이 마지막 명령을 표시하며 너무 복잡해서 자주 입력할 수 없습니다 .

명확히 하자면, 많은 서버에서 사용해야 하고 모든 서버를 사용자 정의하거나 사용자 정의 기능을 생성하는 것이 불가능하기 때문에 이를 수행할 수 있는 표준적이고 간단한 방법을 찾고 있습니다. 게다가 이 명령을 수동으로 입력해야 하므로 매우 간단합니다.

액세스해야 하는 서버의 기본값은 HISTControl=ignoreboth인 것 같으므로 다음을 사용할 수 있습니다.

 history 1 

(기록 명령 앞에 공백이 붙음)은 기록에 넣지 않으므로 마지막 명령이 올바르게 표시됩니다.

HISTTIMEFORMAT하지만 기본적으로 설정되어 있지 않으므로 완전한 솔루션은 아닙니다. 더 쉬운 방법이 있나요?

답변1

지적한 대로 명령 자체가 실행하는 마지막 명령이므로 명령 자체를 history 1인쇄하십시오 . history이전 항목을 얻으려면 다음이 필요합니다 history 2.

$ touch foo
$ history 2
$ history 2
19950  touch foo
19951  history 2

따라서 자체 계산 없이 이전 명령을 얻으려면 다음 명령 history을 전달하십시오 head -n1.

$ history 2 | head -n1
19952  touch foo

그런 다음 원하는 형식으로 타임스탬프를 추가합니다( man 3 strftime사용 가능한 형식 참조).

$ HISTTIMEFORMAT="%F %H:%M:%S " history 2 | head -n1
19959  2016-06-11 15:06:08 touch foo

%T( 대신 사용할 수도 있습니다 %H:%M:%S)

답변2

도움이 될 수 있는 비역사적인 옵션 중 하나는 쉘을 표시하도록 사용자 정의하는 것입니다. 나는 이것과 다른 정보(git 브랜치까지!)를 보여주기 위해 그것을 얻었습니다:

HOST='\[\033[02;36m\]\h'; HOST=' '$HOST
TIME='\[\033[01;31m\]\t \[\033[01;32m\]'
LOCATION=' \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH

내 기록 자체에는 도움이 되지 않지만 터미널에서 뒤로 스크롤하면 최소한 다음을 볼 수 있습니다.

$ vi .bashrc
17:57:09 durrantm Castle2012 /home/durrantm 
$ pwd
/home/durrantm
17:57:10 durrantm Castle2012 /home/durrantm 
$ ls *.lt*
ls: cannot access *.lt*: No such file or directory
17:57:15 durrantm Castle2012 /home/durrantm 
$ ls *.rb*
1.rb  2.rb  3.rb  3_step_minimal_foundation_spec.rb  arrival.rb  r.rb  validate_controller.rb  x.rb*
17:57:19 durrantm Castle2012 /home/durrantm 
$ c
17:57:24 durrantm Castle2012 /home/durrantm/Dropbox/_/work/code 
$ which ruby
/home/durrantm/.rvm/rubies/ruby-2.1.2/bin/ruby
17:57:27 durrantm Castle2012 /home/durrantm/Dropbox/_/work/code 

답변3

bash는 마지막 명령이 실행된 시점의 타임스탬프를 얻는 쉬운 방법을 제공하지 않는 것 같습니다.

서버 bash 구성을 사용자 정의할 수 있으면 @terdon의 답변을 기반으로 사용자 정의 bash 기능을 만들 수 있습니다.

답변4

구현하다

export HISTTIMEFORMAT='%F %T '

기록 파일은 시간을 기록합니다(새 명령에만 해당).

$ history 5

99576  2016-06-13 02:26:25 export HISTTIMEFORMAT='%F %T '
99580  2016-06-13 02:26:45 bash -c 'IFS=:$IFS ; set -- a b c ; echo "$@ "'
99581  2016-06-13 02:27:37 dash -c 'set a b c; IFS=; echo $*'
99582  2016-06-13 02:28:25 fc -l -1
99607  2016-06-13 02:28:25 history 5

그리고

기록에 기록되지 않도록 명령 앞에 공백을 사용하십시오.

$  history 1
99607  2016-06-13 02:28:25 history 5

그런 다음 더 쉽게 별칭을 만듭니다.

$ alias h='history 1'

그런 다음 설정 후 공백을 추가하여 HISTTIMEFORMAT다음을 얻습니다.

$  h                ### Understand that there is an space in front of the command.
99607  2016-06-13 02:28:25 history 5

관련 정보