2017-05-10 12 views
1

하나의 명령을 사용하여 터미널에서 3 개의 새로운 터미널에 3 개의 다른 폴더를 열고 싶습니다. 그들 모두는 서로 독립적으로 실행 되어야만 하나의 명령은 전에 명령에 의존하지 않는다는 것을 의미합니다. 여기 여러 개의 Bash 별칭 호출하기

은 .bashrc에

alias cmd1=gnome-terminal && cd ~/Desktop/ 

alias cmd2=gnome-terminal && cd ~/Documents/ 

alias cmd3=gnome-terminal && cd ~/Music/ 

alias runcmds='cmd1 & cmd2 & cmd3' 

에서 호출 내 .bash_aliases이다 그러나 이것은 음악 디렉토리에 세 개의 터미널을 열어 올바르게 명령을 실행하지 않습니다. runcmds가 3 개의 명령을 모두 개별적으로 실행하도록하려면 어떻게해야합니까?

언제 인용 부호를 사용해야합니까? 필요없는 경우는 언제입니까?

+0

를 ... 어. 'gnome-terminal && cd ~/Desktop'은 새로운 터미널 내부에서'cd' *를 실행하지 않습니다. 이것은 당신이 원하는 것이라고 생각합니다. 대신, 새로운 터미널을 실행하고 터미널을 시작한 * 별도의 외부 프로세스 인'cd '를 실행합니다. 이것은 완전히 다른 쉘입니다. –

+1

따옴표가 필요하지 않을 때 -'alias cmd1 = gnome-terminal && cd ~/Desktop'은 먼저'cmd1'을'gnome-terminal'의 별칭으로 만들고'~/Desktop'을 지정합니다. 반대로 alias cmd1 = 'gnome-terminal && cd ~/Desktop''은 alias가 정의되었을 때와 달리 alias가 호출 될 때'~/Desktop'으로'cd'됩니다. –

+1

쉘 프로그래머로서 성공하려면 [Bash에서 인용 부호가 어떻게 동작하는지] (http://mywiki.wooledge.org/Quotes)를 이해하는 것이 중요합니다. 언제 사용할 수 있는지 확실하지 않으면 온라인에서 사용할 수있는 다양한 리소스가 있습니다. – dimo414

답변

5

작업의 주문이 거꾸로 : 당신이 cd에 의해 영향을 그 터미널에서 새로운 쉘을하려는 경우, 당신은 터미널을 시작 전에 cd해야합니다. 또한 두 명령 (cdgnome-terminal 호출)이 별명의 일부로 간주되도록하려면 따옴표를 사용해야합니다. 그런데

alias cmd1='cd ~/Desktop/ && gnome-terminal' 
alias cmd2='cd ~/Documents/ && gnome-terminal' 
alias cmd3='cd ~/Music/ && gnome-terminal' 
alias runcmds='cmd1 & cmd2 & cmd3' 

, 나는 좋을 것 - 강력 - 모든 별칭을 사용하는 대신 함수를 정의하지 : 없음 반대로, 무엇이든지 (최종 &을 포함

cmd1() { cd ~/Desktop && gnome-terminal; } 
cmd2() { cd ~/Documents && gnome-terminal; } 
cmd3() { cd ~/Music && gnome-terminal; } 
runcmds() { cmd1 & cmd2 & cmd3 & } 

을 인용하지 최종 ;은 서브 쉘에서 cmd3이 다른 서브 루틴과 마찬가지로 실행되도록하여 부모 쉘의 위치가 ~/Music으로 변경되는 것을 방지합니다.

runcmds() { 
    local dir 
    for dir in ~/Desktop ~/Documents ~/Music; do 
    (cd "$dir" && exec gnome-terminal) & 
    done 
} 
+0

찰스 더피 감사합니다! 함수는 매력처럼 작동합니다 :) – user3226932

3

는 사실 gnome-terminal--working-directory 옵션을 용이하게 : 물론, 당신은 단지 하나 개의 기능을 구현할 수있다. man gnome-terminal에서

:

--working 디렉토리 = DIRNAME
          터미널의 작업 디렉토리 DIRNAME 설정합니다. 다음과 같이

당신은 별칭을 사용할 수 있습니다

alias cmd1='gnome-terminal --working-directory="$HOME/Desktop"' 
alias cmd2='gnome-terminal --working-directory="$HOME/Documents"' 
alias cmd3='gnome-terminal --working-directory="$HOME/Music"' 
alias runcmds='cmd1 & cmd2 & cmd3'