bash에 대한 별칭에서 여러 명령


133

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

gnome-screensaver 
gnome-screensaver-command --lock 

은 지금은 내 .bashrc에에

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

을 추가했지만 나는 자주 내 워크 스테이션을 잠글 수 있기 때문에 단지 하나의 명령을 입력하는 것이 더 쉽습니다.

260

보십시오 : 당신의 .bashrc에

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

또는

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

두 번째 솔루션은 당신이 인수를 사용할 수 있습니다.

+5

그건 안된다 "기능 잠금() {어쩌구}"</p> <p>당신이 당신의 별명을 선언에서 같은 문제에 올 경우, 당신은 문제를 해결하기는 아래의 링크를 참조 할 수 있습니다 ? 14 jan. 102010-01-14 12:12:53

+7

나는 'sh'문법을 사용하는데, 이는 'bash'와 잘 작동한다. 14 jan. 102010-01-14 13:54:55

+2

어떻게 인수를 전달합니까? 예기치 않은 토큰'msg'' 근처에서'lock()'괄호 안에 변수 'msg'를 중첩하면 오류가 발생합니다. 25 mar. 142014-03-25 14:57:54

+6

함수가 정의되면 명령처럼 작동합니다. 인수는 공백으로 구분 된 명령 줄에 있습니다. . 선언 부분에서 인수는 함수 본문에서'$ 1','$ 2' ...입니다. 25 mar. 142014-03-25 15:17:23

  0

멀티 라인 함수에 대한 언급에 감사드립니다. 13 jul. 142014-07-13 07:58:30


11

작동하지 않습니까? 당신이 인수를 제공하려는 경우

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

이 잘 작동하지 않습니다

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

4

이는이 명령을 차례로 실행됩니다 첫 번째 명령으로. 또는 $ HOME/bin 디렉토리에 사소한 스크립트를 작성하십시오.


2

그래서 세미콜론을 사용

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

9

별칭은 별칭 명령 이름을 의미합니다. 그 이상으로 기능을 수행해야합니다.

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

별칭은 여전히 ​​원래 이름과 연결된 이름입니다. ll은 다소 특정 종류의 ls입니다.

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

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

기술적으로 Bash 쉘 언어의 별명은 기능이 매우 제한적이어서 이상의 단일 명령 이상을 포함하는 모든 것에 적합하지 않습니다. 단일 명령어의 작은 변형을 만들기 위해이 명령어를 사용하십시오. 시나리오 등에서 별명

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

사용법 :

의도가 내부적으로 다른 명령에 해결할 작업을 수행하는 새로운 명령을 작성하는 것이기 때문에

는 유일한 정답은 여기에 함수를 사용하는 것입니다 이것은 많은 문제로 이어집니다. 명령과 같이 실행되는 함수와 달리 별칭은 현재 명령으로 확장되므로이 별칭 "명령"을 다른 명령과 결합 할 때 매우 예기치 않은 문제가 발생할 수 있습니다. 그들은 또한 스크립트에서 작동하지 않습니다.

  0

답안에 어떤 예도 제공 할 수 있다면 가장 좋을 것입니다. 업데이트를 기다리고 있습니다. 15 nov. 172017-11-15 14:40:00


56

다른 답변은 질문에 적절하게 답변하지만 두 번째 명령은 첫 번째 명령이 성공적으로 종료되는 것과 다릅니다. 당신은 당신의 별명에 short-circuit evaluation을 시도 할 수 있습니다 :

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

이제 두 번째 명령은 시도조차되지 않습니다 처음에 성공하지 않는 한. 단락 회로 평가에 대한 더 자세한 설명은 SO question에 설명되어 있습니다.

+4

놀랍게도,'git fetch && git pull origin master '로 이것을 시도해 보았고'&&'를';'로 바꿀 때까지 나에게 도움이되지 않았습니다. 25 feb. 142014-02-25 09:42:00

+3

아마도 git fetch가 0 이외의 다른 것을 반환했기 때문일까요? 12 feb. 152015-02-12 09:53:14

  0

도움 됨! Xubuntu 16.04.3에서 나를 위해 일하는 것 09 jan. 182018-01-09 12:16:54


0

별칭을 ~/.bashrc으로 선언 할 때 문제가 발생했습니다. 터미널에서 ~/.bashrc으로 선언 한 별칭을 인식하지 못했습니다. Mac OS X은 기본적으로 login-shell으로 실행되므로 ~/.bashrc 대신 ~/.bash_profile이 호출된다는 기사에서 배웠습니다.

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