명령행 시간 추적기 구축

6556 단어 toolslearningtime
나는 프로젝트를 시작했다. 나는 내가 소비한 시간을 추적하고 싶다.
나는 시간 추적에 사용되는 데스크톱 프로그램, 사이트, 브라우저 확장자를 검색하고 찾았다.
그러나 일부는 계기판이 달린 대형 제품의 일부다.
심지어 VScode의 추적 확장을 다운로드하고 테스트했지만, 그 중 일부는 일부 플랫폼에서 계정을 사용하여 보고해야 한다.
나는 간단한 것을 원한다. 임무를 시작하고, 임무를 멈추고, 시간을 표시한다.
나는 모든 항목, 임무, 활동, 개인, 일에 사용할 수 있다.
나는 대부분의 경우 터미널이 열려 있다는 것을 알고 있기 때문에, 나는 그것이 내가 추적기를 사용하는 가장 좋은 곳이라고 생각한다.
예를 들어, 작업에 대한 새 분기를 생성하기 전에
타이머를 시작할 수 있습니다. 타이머를 멈춰야 할 때 멈추십시오.
이 모든 것은 하나의 터미널 옵션에 집중되어 있다.
나는 명령행 시간 추적기 솔루션을 찾기 시작했다.
얼마 못 찾았어요.그중 대다수는 파이톤으로 작성되었지만, 나에게는 이런 특성들이 너무 많다.
NodeJS 패키지도 발견했는데 그 중 하나는 C로 작성된 것이었다. 너무 간단했다. 왜냐하면 나는 시간과 분(초뿐만 아니라) 단위의 시간이 필요하기 때문이다.
나는 왜 그런지 모르겠지만, 명령행 시간 추적기는 셸 스크립트에서 이루어져야 한다는 것이 최초의 생각이었다.
Time tracker in Bash를 찾았습니다. 저는 이런 기능을 좋아하지만 어떻게 설치하는지에 대한 설명이 없습니다.
시도할 때 스크립트에서 오류가 발생했습니다. (macOS와 호환되지 않을 수도 있습니다.)
나는 모든 유닉스 시스템에서 사용할 수 있기 때문에 파이톤, C, NodeJS를 설치할 필요가 없기 때문에 셸 스크립트를 직접 쓰기로 결정했다.
나는 첫 번째 버전을 완성하는 데 아마 4~5시간이 걸릴 것이라고 생각한다.
나는 명령 tt (시간 추적기) 을 호출하기로 결정했다. 왜냐하면 그것은 매우 짧기 때문에 입력하고 작업을 시작할 수 없기 때문이다.

구현
우선, 나는 Hello World 스크립트를 시작한 후에 내가 사용하는 것들을 알아차렸지만, 나는 왜 그런지 확실하지 않다.
대부분의 명령행 스크립트의 첫 번째 줄 #!/usr/bin/env bash 을 말합니다.왜 그것을 필요로 합니까?
검색을 통해 나는 그것을 Shebang라고 부르는 것을 발견했다.
나는 링크와 해석을 파일의 첫머리에 놓기로 했다.
따라서 참여하고 싶거나 실현만 보고 싶은 사람들도 왜 이 줄이 필요한지 알게 된다.
#!/usr/bin/env sh
# First 2 chars in the file are called Shebang https://en.wikipedia.org/wiki/Shebang_%28Unix%29
# In this case:
#   Execute this file with a "sh" interpreter, using the "env" program search path to find it.
# Now you know!

tt() {
요구 사항은 간단합니다.
  • 이벤트 시작
  • 활동 중지
  • 활동 기록 및 소요 시간(시간 및 분)
  • 청결 역사
  • 우선 두 개의 파일이 필요합니다.
  • ~/.tt_logs - 모든 로그를 저장합니다.
  • ~/.tt_session - 현재 활동 시작 시간에 대한 정보를 저장합니다.
  • 세션 파일에는 start_timeactivity_name가 포함됩니다.date +%s를 사용하여 시간을 초 단위로 저장하고 Unix time로 돌아갑니다.
    셸 스크립트로 기본 파일을 작성하는 것은 매우 간단합니다.
    echo "start_time=" > ~/.tt_session
    echo "activity_name=" >> ~/.tt_session
    
  • (> 리셋 연산자는 "start_time=" 주어진 파일에 기록됩니다.파일이 존재하면 길이가 0으로 잘립니다.그렇지 않으면 파일이 생성됩니다.이 연산자를 사용할 때는 중요한 파일을 덮어쓸 수 있으므로 주의해야 합니다.
  • >> 리셋 조작부호는 출력을 주어진 파일에 추가합니다.파일이 존재하지 않으면 이 파일을 만듭니다.
  • 활동이 완료되면 스크립트는 세션 파일에서 데이터를 읽고 로그 파일에 기록해야 합니다.
    파일에서 여러 옵션을 읽을 수 있습니다.대량의 테스트를 거쳐 나는 나의 사례에 적합한 방법을 찾았다.
    start_time=$(grep 'start_time=' "$TT_SESSION" | sed -E "s/.*start_time=([0-9]+).*/\\1/")
    
    솔직히 말해서, 나는 이 해결 방안을 좋아하지 않는다. 나는 너도 그렇다고 믿지만, 나는 이 문제에 더 많은 시간을 쓰고 싶지 않다.
    더 좋은 기부금을 쓰신 것을 환영합니다.
    3시간에서 4시간 후에, 나는 새로운 용례가 등장함에 따라 이 스크립트를 만드는 데 더 많은 시간이 필요하다는 것을 알게 되었다.
    만약 내가 활동을 멈추고 싶거나 로그가 없는 상태에서 활동을 중지하고 싶다면 어떻게 해야 합니까?
    새로운 용례를 어떻게 해결할 것인가를 생각할 때, 나도 나 자신에게 물었다. 이 각본에 걸리는 시간이 너무 많지 않니?
    왜 기능이 더 풍부한 파이톤 솔루션을 사용하지 않습니까?
    그러나 나는 그것을 끝까지 미루기로 결정했다. 왜냐하면 이 일을 하면서 새로운 것을 배웠고, 만약 내가 더 많은 기능을 필요로 한다면, 나는 나중에 그것을 추가할 것이다.
    현재 기능
    tt - time tracker
    
    Tracks activity time with a simple start/stop syntax. Logs to CSV.
    Allows one activity active at a time, per session.
    
    usage: tt                                       # show this help
    usage: tt (--help or -h)                        # show this help
    usage: tt (--start or -s) [activity name]       # start a new activity
    usage: tt (--pause or -p)                       # pauses current activity
    usage: tt (--done or -d or --finish or -f)      # stop and log activity
    usage: tt (--abort or -a)                       # stop activity, no log
    usage: tt --clear-logs                          # delete log of previous activities
    usage: tt --activity-name                       # show activity for current session
    usage: tt (--logs or -l)                        # show logs of previous activities
    

    장치
    시스템에서 스크립트 함수 tt 를 어떻게 사용할 수 있는지 검색할 때, 100% 정확한 해결 방안을 찾지 못해서, 사용하기로 결정했습니다 source.

    The source command reads and executes commands from the file specified as its argument in the current shell environment. It is useful to load functions, variables, and configuration files into shell scripts.

    https://linuxize.com/post/bash-source-command/


    이것은 이 시간 추적기를 사용하려면 원본 코드를 다운로드해서 원하는 곳에 두어야 한다는 것을 의미한다.
    예를 들어, curl를 사용하여 홈 디렉토리의 파일을 다운로드하고 씁니다.
    curl https://raw.githubusercontent.com/strdr4605/tt/master/tt.sh > $HOME/tt.sh
    
    셸 프로필에 source $HOME/tt.sh 을 추가하기만 하면 됩니다.
    이외에 코드의 질에 관심을 가진 사람으로서
    나는 다른 셸 스크립트처럼 크지 않고, 모든 용례에 단독 함수가 있는 좋은 코드 구조를 확보했다. if else switch case마지막으로, 나는 하루 동안 이 일을 했다.
    자술, 포맷, linting 등 10-12시간이 걸린다고 말할 것이다.
    나는 정확한 시간을 모른다. 왜냐하면 나는 이 프로젝트에서 시간 추적기를 사용하지 않았기 때문이다😅.
    공헌을 하고 싶거나 프로젝트의 실시 상황을 보고 싶을 뿐입니다https://github.com/strdr4605/tt.
    tt -f
    
    Sun Mar 21 20:39:04 UTC 2021 | Writing this post | 1h 43m
    

    좋은 웹페이지 즐겨찾기