Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

.bashrc 파일을 사용하여 절반의 키 입력으로 두 배의 작업을 수행하는 방법

Bash 스크립트로 Ubuntu를 설정하는 방법에 대한 최근 게시물에서 .bashrc의 마법을 간략하게 언급했습니다. . 이것은 제대로 작동하지 않았으므로 다음은 Bash 구성 파일이 수행할 수 있는 작업에 대해 좀 더 자세히 설명하는 빠른 게시물입니다.

현재 구성을 사용하면 워크플로가 크게 개선되고 이 구성 없이 사용해야 하는 키 입력의 50% 이상을 절약할 수 있습니다! 더 적은 수의 키 누름으로 더 효율적으로 작업을 개선할 수 있는 별칭, 기능 및 프롬프트 구성의 몇 가지 예를 살펴보겠습니다.

Bash 별칭

똑똑하게 작성된 .bashrc 키 입력을 많이 저장할 수 있습니다. bash 별칭 또는 더 큰 명령으로 확장되는 문자열을 사용하여 문자 그대로 이를 활용할 수 있습니다. 예시를 위해 다음은 터미널에서 파일을 복사하기 위한 Bash 별칭입니다.

# Always copy contents of directories (r)ecursively and explain (v) what was done
alias cp='cp -rv'

alias 명령은 우리가 입력할 문자열을 정의하고 그 문자열이 확장될 대상이 뒤따릅니다. cp와 같은 기존 명령을 재정의할 수 있습니다. 위에. 자체적으로 cp 명령은 디렉토리가 아닌 파일만 복사하고 자동으로 성공합니다. 이 별칭을 사용하면 두 플래그를 전달하거나 cd 또는 ls 복사한 파일의 위치를 ​​확인하여 파일이 있는지 확인합니다! 이제 두 번의 키 누르기만 하면 됩니다(c의 경우). 및 d )이(가) 이 모든 작업을 수행합니다.

다음은 .bashrc입니다. 공통 기능으로 플래그를 전달하기 위한 별칭입니다.

# List contents with colors for file types, (A)lmost all hidden files (without . and ..), in (C)olumns, with class indicators (F)
alias ls='ls --color=auto -ACF'
# List contents with colors for file types, (a)ll hidden entries (including . and ..), use (l)ong listing format, with class indicators (F)
alias ll='ls --color=auto -alF'

# Explain (v) what was done when moving a file
alias mv='mv -v'
# Create any non-existent (p)arent directories and explain (v) what was done
alias mkdir='mkdir -pv'
# Always try to (c)ontinue getting a partially-downloaded file
alias wget='wget -c'

별칭은 긴 명령을 입력하지 않으려는 경우에도 유용합니다. 다음은 Python 환경에서 작업할 때 사용하는 몇 가지입니다.

alias pym='python3 manage.py'
alias mkenv='python3 -m venv env'
alias startenv='source env/bin/activate && which python3'
alias stopenv='deactivate'

Bash 별칭이 시간을 절약할 수 있는 방법에 대한 추가 영감을 얻으려면 이 기사의 예제를 적극 권장합니다.

배시 기능

위의 별칭의 한 가지 단점은 정적이라는 것입니다. 항상 정확히 선언된 텍스트로 확장됩니다. 인수를 사용하는 Bash 별칭의 경우 함수를 만들어야 합니다. 다음과 같이 할 수 있습니다.

# Show contents of the directory after changing to it
function cd () {
    builtin cd "$1"
    ls -ACF
}

cd를 몇 번이나 입력했는지 셀 수 없습니다. 그리고 ls 내가 지금 있는 디렉토리의 내용을 볼 수 있습니다. 이 기능을 설정하면 이 두 글자만으로 모든 일이 일어납니다! 함수는 첫 번째 인수인 $1를 취합니다. , 디렉토리를 변경할 위치로 , 파일 유형 표시기가 있는 멋진 형식의 열에 해당 디렉토리의 내용을 인쇄합니다. builtin 이 기본 명령을 무시할 수 있도록 Bash를 가져오는 데 필요한 부분입니다.

Bash 기능은 소프트웨어를 다운로드하거나 업그레이드할 때도 매우 유용합니다. 이전에는 뛰어난 배송 빈도 덕분에 정적 사이트 생성기 Hugo의 새로운 확장 버전을 다운로드하는 데 몇 주에 한 번씩 최소 몇 분을 보냈습니다. 기능을 사용하면 버전만 전달하면 몇 초 안에 업그레이드가 이루어집니다.

# Hugo install or upgrade
function gethugo () {
    wget -q -P tmp/ https://github.com/gohugoio/hugo/releases/download/v"$@"/hugo_extended_"$@"_Linux-64bit.tar.gz
    tar xf tmp/hugo_extended_"$@"_Linux-64bit.tar.gz -C tmp/
    sudo mv -f tmp/hugo /usr/local/bin/
    rm -rf tmp/
    hugo version
}

$@ 표기법은 단순히 주어진 모든 인수를 취하여 함수의 자리를 대체합니다. 위의 기능을 실행하고 Hugo 버전 0.57.2를 다운로드하려면 gethugo 0.57.2 명령을 사용합니다. .

Golang용도 있습니다.

function getgolang () {
    sudo rm -rf /usr/local/go
    wget -q -P tmp/ https://dl.google.com/go/go"$@".linux-amd64.tar.gz
    sudo tar -C /usr/local -xzf tmp/go"$@".linux-amd64.tar.gz
    rm -rf tmp/
    go version
}

아니면 GitLab의 원격 원본 URL을 현재 저장소에 추가하는 기능은 어떻습니까?

function glab () {
    git remote set-url origin --add git@gitlab.com:"$@"/"${PWD##*/}".git
    git remote -v
}

glab username 사용 , 새로운 origin을 생성할 수 있습니다. username이 있는 현재 Git 저장소의 URL GitLab.com에서 새 원격 URL로 푸시하면 새 개인 GitLab 저장소가 자동으로 생성되므로 백업을 생성하는 데 유용한 단축키입니다!

Bash 기능은 실제로 스크립팅 가능성에 의해서만 제한되며 실제로는 거의 제한이 없습니다. 터미널에 몇 줄을 입력해야 하는 자주 하는 일이 있다면 Bash 함수를 만들 수 있을 것입니다!

배시 프롬프트

디렉토리 내용 외에도 현재 있는 디렉토리의 전체 경로를 보는 것도 유용합니다. Bash 프롬프트는 현재 Git 분기와 같은 다른 유용한 정보와 함께 이 경로를 표시할 수 있습니다. 가독성을 높이기 위해 프롬프트의 각 부분에 색상을 정의할 수 있습니다. .bashrc에서 프롬프트를 설정하는 방법은 다음과 같습니다. 이를 위해:

# Colour codes are cumbersome, so let's name them
txtcyn='\[\e[0;96m\]' # Cyan
txtpur='\[\e[0;35m\]' # Purple
txtwht='\[\e[0;37m\]' # White
txtrst='\[\e[0m\]'    # Text Reset

# Which (C)olour for what part of the prompt?
pathC="${txtcyn}"
gitC="${txtpur}"
pointerC="${txtwht}"
normalC="${txtrst}"

# Get the name of our branch and put parenthesis around it
gitBranch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}

# Build the prompt
export PS1="${pathC}\w ${gitC}\$(gitBranch) ${pointerC}\$${normalC} "

결과:

~/github/myrepo (master) $

색상 이름을 지정하면 한 색상이 시작 및 중지되는 위치와 다음 색상이 시작되는 위치를 쉽게 식별하는 데 도움이 됩니다. 터미널에 표시되는 프롬프트는 export PS1 뒤에 오는 문자열로 정의됩니다. , 프롬프트의 각 구성 요소가 이스케이프 시퀀스로 설정되어 있습니다. 이를 분석해 보겠습니다.

  • \w 현재 작업 디렉토리를 표시합니다.
  • \$(gitBranch) gitBranch 호출 현재 Git 분기를 표시하는 위에서 정의한 함수,
  • \$ 일반 사용자 또는 일반 사용자 모드인 경우 "$"가 표시되고 루트인 경우 "#"이 표시됩니다.

Bash 이스케이프 시퀀스의 전체 목록은 시간과 날짜를 포함하여 더 많은 정보를 표시하는 데 도움이 될 수 있습니다! Bash 프롬프트는 사용자 정의가 가능하고 개별적이므로 원하는 방식으로 자유롭게 설정하십시오.

다음은 정보를 가장 우선시하고 보다 효율적으로 작업하는 데 도움이 되는 몇 가지 옵션입니다.

일을 미루는 것을 싫어하시는 분들을 위해

사용자 이름 및 현재 시간(초), 24시간 HH:MM:SS 형식:

export PS1="${userC}\u ${normalC}at \t >"
user at 09:35:55 >

자신의 위치를 ​​알고 싶어하는 사람들을 위해

별도의 줄에 전체 파일 경로 및 사용자 이름:

export PS1="${pathC}\w${normalC}\n\u:"
~/github/myrepo
user:

미니멀리스트를 위한

export PS1=">"
>

기본적인 이스케이프 시퀀스만으로 많은 실용적인 프롬프트를 작성할 수 있습니다. Git 분기 예제에서와 같이 프롬프트와 기능을 통합하기 시작하면 상황이 정말 복잡해질 수 있습니다. 이 정도의 복잡성이 생산성에 대한 추가 또는 손실인지 여부는 당신만이 확실히 알 수 있습니다!

빠른 검색으로 쉽게 사용할 수 있는 프로그램으로 많은 멋진 Bash 프롬프트가 가능합니다. 나는 의도적으로 여기에 샘플을 제공하지 않았습니다. 글쎄, 당신이 내가 할 수 있는 한 이 물건에 대해 흥분하는 경향이 있다면, 당신이 이 포스트를 읽기 시작하기 전에 당신이 하고 있던 일로 돌아오기까지 몇 시간이 걸릴 수 있기 때문입니다. 내 양심에 그것을 가질 수 없습니다. ?

이제 투자한 시간과 Bash 구성 파일에서 얻은 유용성 사이에서 균형을 잘 잡았으면 합니다! 새로 복구된 키 입력 능력을 잘 사용하시기 바랍니다.