wake-up-neo.com

쉘의 모든 명령 접두사

매번 입력하지 않고 셸의 모든 명령을 접두사로 사용하려면 어떻게해야합니까?

내 사용 사례 1 :

$ git init
$ git add -A
$ git commit
$ git Push

접두사는 git␣ (는 공백 문자입니다)

init
add -A
commit
Push

내 사용 사례 2 :

Sudo docker run my-repo/my-image
Sudo docker ps
Sudo docker images

접두사는 Sudo docker␣

run my-repo/my-image
ps
images

다음과 같이 할 수 있다면 가장 좋습니다.

$ git init
$ use_prefix Sudo docker
> ps
> images
> exit
$ Sudo docker run my-repo/my-image
21
iybkyqjpbEP

다음과 같은 기능을 사용할 수 있습니다.

use_prefix () {
    while read -ra c; do
        "[email protected]" "${c[@]}"
    done
}

이렇게하면 접두사가 use_prefix 명령을 입력 한 다음 접두사를 지정할 각 명령에 대해 stdin에서 읽습니다.

참고 : while 읽기 루프를 종료하려면 ctrl + c를 사용해야합니다.

16
jesse_b

xargs를 사용할 수 있지만 caveats 사용과 관련하여

xargs -L1 git

init, add -A 등, 한 줄에 하나씩

13
iruvar

zsh Shell을 사용하면 다음을 실행할 수 있습니다.

zle-line-init() if [[ $CONTEXT = start ]] LBUFFER=$zle_prefix$LBUFFER
zle -N zle-line-init

$zle_prefix의 내용이 새 명령 행 입력을 시작할 때 버퍼의 시작 부분에 삽입됩니다.

그래서 당신은 할 수 있습니다 :

zle_prefix='Sudo docker '

다음 명령 시작시 Sudo docker가 삽입됩니다.

커서 앞에있는 것과 함께 primes$zle_prefix라는 다른 위젯을 정의 할 수 있습니다.

prime-zle-prefix() zle_prefix=$LBUFFER
zle -N prime-zle-prefix
bindkey '\eP' prime-zle-prefix

그런 다음 입력 할 수 있습니다

$ 도도 커 Alt+Shift+P ls

그런 다음 모든 후속 명령에 Sudo docker가 삽입됩니다. 완료되면 줄을 비 웁니다 (Ctrl+U) 입력 Alt+Shift+P 다시 $zle_prefix를 비우십시오.

10
Stéphane Chazelas

한 가지 해결책은 별칭을 설정하는 것이지만 내장 된 명령 및 시스템 이진 (예 : ps)과 충돌 할 때주의해야합니다.

귀하의 ~/.bashrc 다음과 같이 몇 줄을 추가하십시오 (다음에 bash를 시작하거나 source ~/.bashrc) :

alias commit='git commit'
alias docker='Sudo docker'
alias images='docker images'
alias ps='docker ps'

실제 ps을 (를) 실행하려면 command ps 또는 \ps. 스크립트에서 별명을 사용할 수있게 지정하지 않는 한 일반적으로 명령 행에서의 입력에만 영향을줍니다.

당신이 제안하는 것과 같은 대화 형 Shell 인터페이스에 관해서는 더 많은 것이 필요합니다.

즉, @Jesse_B의 훌륭한 제안이 확장되었습니다.

use_prefix () {
    while read -p "$* >" -ra c; do
        [ "${c[0]}" = "exit" ] && break
        "[email protected]" "${c[@]}"
    done
}

exit 키워드를 활성화하고 수행중인 작업을 상기시키는 프롬프트를 추가합니다.

8
bxm

안녕하세요. 사이트에 오신 것을 환영합니다.

이에 대한 한 가지 가능한 해결 방법은 aliasing

"접두사"를 부정하지는 않지만 시간을 많이 절약 할 수 있습니다.

예 :.

alias g=git

$ g init
$ g add -A
$ g commit
$ g Push

OR

여러 단어가 있으면 따옴표 만 사용하십시오.

alias sd="Sudo docker"

sd run my-repo/my-image
sd ps
sd images

그러나 각 세션마다이 별명을 재설정해야합니다.

4
CyberStems

기본적으로 특정 명령에 대한 범용 하위 쉘이 필요합니다.

Shell() {
    [email protected] bash -c 'while read -p "${TOPCMD##*/}> " -ra sub; do
        case ${sub[0]:-} in
        "") continue;;
        exit) exit;;
        escape) (set -x; ${sub[@]:1});;
        *) (set -x; ${TOPCMD} ${sub[@]});;
        esac
        done'
}

그럼:

$ Shell git -p
git -p> init
+ git -p init
Initialized Git repository in /path/to/.git/
git -p> escape touch foo
+ touch foo
git -p> add .
+ git -p add .
git -p> status
+ git -p status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   foo

git -p> 

입력하는 모든 명령은 원래 명령 (절대 또는 상대 및 인수 포함)이 앞에옵니다. 프롬프트는 현재 어떤 명령을 받았는지 알려줍니다. exit 전체 또는 escape 한 명령을 수행 할 수 있습니다.

1
bishop

Linux의 .bashrc 파일에서 별명을 작성할 수 있습니다. alias init = "git init"

터미널에서 init 명령을 실행하면 자동으로 "git init"명령이 호출됩니다.

0
Nikita Bakshi

Bash를 사용한다고 가정하면 위에서 언급 한 것처럼 여러 가지 방법이 있습니다. 다음은 내가 가장 편리한 것으로 확인한 것입니다-YMMV :

  1. 사용할 각 "바로 가기"에 대한 기능을 작성하십시오.
  2. ~/.bash_aliases
  3. 이 파일을 .bash_profile.
  4. 함수 다음에 인수를 호출하십시오.

엄밀히 말하면 파일에는 별칭이 포함되어 있지 않지만 그 이름을 사용하여 물건을 정리합니다. .bash_functions라고 부르고 싶을 수도 있습니다.

다음은 시작하기위한 매우 간단한 예입니다. 실제로 인수를 전달했는지 여부는 확인하지 않습니다.

$ cat ~/.bash_aliases

g() {
 git "[email protected]"
}

sudock() {
 Sudo docker "[email protected]"
}

그런 다음 .bash_profile 다음과 같이 소스를 지정하십시오.

. ~/.bash_aliases

다음은 몇 가지 샘플 사용법입니다.

g status
g commit -m 'initial commit' fileName
sudock run my-repo/my-image

$ @ 대신 $ 1을 사용할 수 있지만 함수에 전달 된 모든 것을 고려하는 대신 하나의 인수 만 사용합니다.

HTH.

0
Hopping Bunny