bash에 대한 별칭의 여러 명령


210

다음 두 명령을 연속적으로 실행하는 별칭을 정의하고 싶습니다.

gnome-screensaver
gnome-screensaver-command --lock

지금은 추가했습니다

alias lock='gnome-screensaver-command --lock'

내 .bashrc에 있지만 워크 스테이션을 너무 자주 잠그기 때문에 하나의 명령을 입력하는 것이 더 쉽습니다.

답변:


390

시험:

alias lock='gnome-screensaver; gnome-screensaver-command --lock'

또는

lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}

.bashrc에

두 번째 솔루션을 사용하면 인수를 사용할 수 있습니다.


7
"function lock () {blah}"이 아니어야합니까?
emeraldjava

2
당신은 어떻게 논쟁을 전달합니까? lock()괄호 안에 중첩 변수 'msg' 가 syntax error near unexpected token 있으면 msg'` .. 오류가 발생 합니다.
Geotheory

8
함수가 정의되면 명령처럼 작동합니다. 인수는 공백으로 구분되어 명령 행에 있습니다. 선언 부분에서 인수는 $1, $2... 함수 본문에.
mouviciel

1
params에 대한 별칭 줄을 포함하지 않기위한 공감.
Philip Rego 2016 년

2
@PhilipRego-나는 당신에게서 배우고 당신의 대답을 찬성으로 기뻐할 것입니다.
mouviciel 2016 년

79

다른 답변은 질문에 적절하게 대답하지만 두 번째 명령은 첫 번째 명령이 성공적으로 종료되는 것처럼 보입니다. 별명에서 단락 평가 를 시도 할 수 있습니다 .

alias lock='gnome-screensaver && gnome-screensaver-command --lock'

이제 첫 번째 명령이 성공하지 않으면 두 번째 명령도 시도되지 않습니다. 단락 평가에 대한 자세한 설명은이 SO 질문에 설명되어 있습니다.


5
놀랍게도 이것을 사용해 보았고 git fetch && git pull origin master로 교체하기 전까지는 효과가 없었 &&습니다 ;.
hakunin

3
아마도 git fetch가 0 이외의 것을 반환했기 때문에?
RobAu

도와주세요! Xubuntu 16.04.3에서 저를위한 작업
Fernando León

params에 대한 별칭 줄을 포함하지 않기위한 공감.
Philip Rego 2016 년

18

별명은 별명 명령 이름을 위한 것 입니다. 그 이상은 기능으로 수행해야합니다.

alias ll='ls -l' # The ll command is an alias for ls -l

별명은 여전히 ​​원래 이름과 연관된 이름입니다. ll단지 약간의 특정 종류입니다 ls.

d() {
    if exists colordiff; then
        colordiff -ur "$@"
    elif exists diff; then
        diff -ur "$@"
    elif exists comm; then
        comm -3 "$1" "$2"
    fi | less
}

함수는 내부 논리가있는 새로운 명령입니다. 단순히 다른 명령의 이름을 바꾸는 것이 아닙니다. 내부 작업을 수행합니다.

기술적으로, Bash 쉘 언어의 별명은 기능이 너무 제한되어 단일 명령 이상을 포함하는 모든 것에 매우 적합하지 않습니다 . 단일 명령의 작은 돌연변이를 만드는 데 사용하십시오.

다른 명령에서 내부적으로 해결되는 작업을 수행하는 새 명령을 작성하는 것이 목적이므로 여기에 함수를 사용하는 것이 정답입니다.

lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}

이와 같은 시나리오에서 별칭을 사용하면 많은 문제가 발생합니다. 명령으로 실행되는 기능과 달리 별칭은 현재 명령으로 확장되어이 별칭 "명령"을 다른 명령과 결합 할 때 예상치 못한 문제가 발생합니다. 또한 스크립트에서 작동하지 않습니다.


답변이있는 예를 제공 할 수 있다면 가장 좋습니다. 업데이트를 기다리는 중입니다.
Sajid Ali

1
params에 대한 별칭 줄을 포함하지 않기위한 공감.
Philip Rego 2016 년

2
@PhilipRego 별칭은 매개 변수를 사용하지 않습니다. 사과가 오렌지색이 아닌 것에 대해 투표를하지 마십시오. 대신 오렌지를 먹는다. 대답이 잘 설명되어 있듯이 올바른 도구는 별칭이 아니라 기능입니다.
lhunath 2016 년

이런 매개 변수를 의미합니다. 중첩 따옴표를 잘못 사용했습니다. alias = "git commit -m 'init'; git push; git status"
Philip Rego 2016 년

@PhilipRego 별명이 아닌 함수를 사용해야합니다. gps() { git commit -m 'init '; git push; git status; } 설명했듯이 별칭은 매우 제한적이고 취약하며 명령의 이름을 바꾸는 것이 유일한 목적입니다. 관련없는 목적으로 그들을 학대하면 방금 경험 한 것과 같이 뜨거운 물에 당신을 착륙시킬 것입니다.
lhunath

11

작동하지 않습니까?

alias whatever='gnome-screensaver ; gnome-screensaver-command --lock'

4

이렇게하면 두 명령이 차례로 실행됩니다.

alias lock='gnome-screensaver ; gnome-screensaver-command --lock'

1

세미콜론을 사용하십시오.

alias lock='gnome-screensaver; gnome-screen-saver-command --lock'

첫 번째 명령에 인수를 제공하려는 경우에는 잘 작동하지 않습니다. 또는 $ HOME / bin 디렉토리에 간단한 스크립트를 작성하십시오.


0

11 살짜리 토론에 내 2 센트를 추가하면 다음을 시도하십시오.

alias lock="gnome-screensaver \gnome-screensaver-command --lock"


0

이 기능을 사용자에게 추가 ~/.bashrc하고 터미널을 다시 시작하거나 실행하십시오.source ~/.bashrc

function lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}

이런 식으로이 두 명령은 lock터미널에 입력 할 때마다 실행됩니다 .

귀하의 특정 경우에 작성하는 alias것이 효과가 있지만 권장하지 않습니다. 직관적으로 우리는 별명 값이 터미널에 값을 입력 한 것과 동일하게 실행될 것이라고 생각합니다. 그러나 그렇지 않습니다 :

별명 정의 및 사용에 관한 규칙은 다소 혼동됩니다.

거의 모든 목적에서 쉘 함수는 별명보다 선호됩니다.

따라서 꼭 필요한 경우가 아니면 별칭을 사용하지 마십시오. https://ss64.com/bash/alias.html


-3

에 별칭을 선언 할 때 문제가 발생했습니다 ~/.bashrc. 터미널에서 내가 선언 한 별칭을 인식하지 못했습니다 ~/.bashrc. Mac OS X login-shell이 기본적으로 실행 되는 기사 (아래에 첨부)를 통해 ~/.bash_profile대신 대신 호출 합니다 ~/.bashrc.

별명을 선언 할 때 동일한 문제가 발생하면 다음 링크를 참조하여 문제를 해결할 수 있습니다.

http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html


이 QA는 별칭 을 넣을 이 아니라 별칭의 여러 명령에 관한 것 입니다.
facuq

source .bashrc로그 아웃하지 않고 별명을 인식 할 수 있도록 파일에 변경 사항을 저장 한 후 항상 수행 합니다.
Scott Fleming
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.