Ubuntu 20.10.4에서 복잡한 별칭을 만드는 방법(Ember 시작, Rails 시작 및 디렉터리 변경)

Ubuntu 20.10.4에서 복잡한 별칭을 만드는 방법(Ember 시작, Rails 시작 및 디렉터리 변경)

별칭을 사용하여 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"
}

참고 railsember직업이 될 것입니다.오래된껍데기. 나는 그들이 무엇인지 모르지만아마도새 셸에서 작업으로 사용하고 싶습니다. 할 수 있지만 여기서는 자세히 설명하지 않겠습니다. (필요한데 해결방법이 없을 경우 별도 질문을 해주세요.)

관련 정보