별칭을 사용하여 Rails/Ember 앱을 시작하고 새 터미널 탭을 열고 Ember 디렉터리로 CD를 이동하고 싶습니다. 저는 Ubuntu 20.10.4와 기본 터미널을 사용합니다. 이것이 내가 지금까지 가지고 있는 것입니다:
alias myproject='cd ~/code/myproject-rails && rails s & cd ~/code/myproject-ember && ember s & gnome-terminal --tab --active && cd ~/code/myproject-ember'
이는 부분적으로 작동합니다. rails s
와 가 모두 ember s
작동하며 브라우저에서 앱을 열 수 있습니다. 새 탭도 열리지만 내 홈 디렉토리에 있습니다. 에 따르면매뉴얼 페이지, --active
"마지막으로 지정된 탭을 해당 창의 활성 탭으로 설정"해야 하지만 cd
실행되지 않습니다(이 탭에서).
여기서 무엇이 잘못되었나요? 대신 사용하면 gnome-terminal --tab -e "cd ~/code/myproject-ember"
오류 메시지가 나타납니다.해당 파일이나 디렉터리가 없습니다..
답변1
읽어주세요Bash에서 언제 별칭을 지정하고, 언제 스크립트를 작성하고, 언제 함수를 작성해야 합니까?
별칭은 순전히 텍스트를 대체하는 것입니다. 귀하의 별칭은 너무 많은 코드를 주입하므로 myproject
함수라면 더 우아할 것입니다 . 이것은 부수적인 "문제"입니다. 원하는 경우 별칭을 고수할 수 있습니다.
cd ~/code/myproject-ember
가장 큰 문제는 새로 열린 탭에서 작업할 것으로 예상된다는 것입니다 . 별칭이 다음 myproject
으로 바뀔 때
… gnome-terminal --tab --active && cd ~/code/myproject-ember
이 코드가 실행되면 gnome-terminal
다음 명령( cd ~/code/myproject-ember
)이 명령줄에 삽입되지 않습니다.거기. cd
이 특정 프로세스가 성공적으로 종료된 후 현재 쉘에서 실행됩니다 gnome-terminal
. 전체 스니펫은 다음과 유사합니다.
… true && cd …
cd
전체 명령을 실행하는 셸이 아닌 다른 곳에서 이 작업을 수행해야 할 이유가 없습니다 .
다음과 같은 이유로 시도가 gnome-terminal --tab -e "cd ~/code/myproject-ember"
실패합니다.
~
절대 확장되지 않습니다. 별칭을 정의할 때 물결표가 작은따옴표로 묶인다는 것을 알고 있습니다. 그런 다음 별칭 확장 후에는큰따옴표. 그런 다음gnome-terminal
문자열을 수신하고cd ~/code/myproject-ember
이를 단어로 분할하고(물결표를 확장하지 않고) 결과 명령을 실행하려고 시도하지만 쉘에서는 실행하지 않습니다(그렇지 않으면 최종적으로 물결표를 확장할 수 있음).- 이런 식으로 달리는 것은
cd
의미가 없습니다.cd …
쉘에서 실행되지 않습니다. 이것은별도의cd
실행 파일, OS에 있을 수도 있고 없을 수도 있습니다. 당신이 그것을 가지고 있고 물결표가 확장되어 있더라도 그것은 무의미한 작업(자체 디렉토리 변경)을gnome-terminal
수행 하고 종료됩니다.cd
이 탭에서는 더 이상 할 일이 없습니다.
gnome-terminal
일부 디렉토리에서 대화형 쉘을 시작 하는 올바른 방법은 다음과 같습니다.여기:
gnome-terminal --working-directory=/path/to/dir
이전과 마찬가지로 이후에 가져오면 gnome-terminal
확장되지 않습니다 . 더 잘 사용 하고 현재 쉘로 확장되었는지 확인하십시오. 별칭을 사용하기로 선택한 경우 다음과 같을 수 있습니다.~
--working-directory=
$HOME
alias myproject='cd ~/code/myproject-rails && rails s & cd ~/code/myproject-ember && ember s & gnome-terminal --tab --active "--working-directory=$HOME/code/myproject-ember"'
이 경우 $HOME
각 별칭 확장 후에 확장됩니다.
내가 말했듯이 IMO 함수는 더 우아할 것입니다.
unalias myproject
myproject () {
cd ~/code/myproject-rails && rails s &
cd ~/code/myproject-ember && ember s &
gnome-terminal --tab --active "--working-directory=$HOME/code/myproject-ember"
}
참고 rails
로 ember
직업이 될 것입니다.오래된껍데기. 나는 그들이 무엇인지 모르지만아마도새 셸에서 작업으로 사용하고 싶습니다. 할 수 있지만 여기서는 자세히 설명하지 않겠습니다. (필요한데 해결방법이 없을 경우 별도 질문을 해주세요.)