如何在 Ubuntu 20.10.4 中建立複雜別名(啟動 Ember、啟動 Rails 和更改目錄)

如何在 Ubuntu 20.10.4 中建立複雜別名(啟動 Ember、啟動 Rails 和更改目錄)

我想使用別名來啟動我的 Rails/Ember 應用程序,打開一個新的終端選項卡並 cd 進入 Ember 目錄。我使用 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 中,何時使用別名、何時使用腳本以及何時編寫函數?

Alias 是純粹的文字替換。您的別名註入瞭如此多的程式碼,如果myproject是一個函數會更優雅。這是一個側面的“問題”。如果需要,您可以保留別名。

主要問題是您希望cd ~/code/myproject-ember在新開啟的選項卡中工作。當您的別名替換myproject

… gnome-terminal --tab --active && cd ~/code/myproject-ember

並且執行此程式碼時,執行的事實gnome-terminal不會將下一個命令(cd ~/code/myproject-ember)注入到命令列中那裡cd該特定進程成功退出後將在目前 shell 中執行gnome-terminal。整個片段類似:

… true && cd …

cd除了在執行整個命令的 shell 中之外,沒有理由在其他任何地方執行此操作。

您的嘗試gnome-terminal --tab -e "cd ~/code/myproject-ember"失敗了,因為:

  • ~永遠不會被擴展。我知道定義別名時波浪號是單引號的。然後在別名擴充之後是雙引號。然後gnome-terminal接收 string cd ~/code/myproject-ember,將其拆分為單字(不擴展波浪號)並嘗試運行生成的命令,但不是在 shell 中運行(否則最終可能會擴展波浪號)。
  • cd這樣跑是沒有意義的。cd …不在 shell 中執行;這需要一個單獨的cd可執行檔,您的作業系統中可能有也可能沒有它。即使你擁有它,即使波浪號被擴展,gnome-terminal執行cd它也會做它毫無意義的工作(更改它自己的目錄)並退出;在此選項卡中將不再需要執行任何操作。

gnome-terminal在某個目錄中啟動互動式 shell 的正確方法是這裡:

gnome-terminal --working-directory=/path/to/dir

與之前類似,如果在 後獲取,則gnome-terminal不會擴展。更好地使用and 確保它可以透過您當前的 shell 進行擴展。如果您選擇使用別名,則可能是:~--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成為職位老的殼。我不知道它們是什麼,但是或許您希望將它們作為新 shell 中的工作。可以做到,但這裡不做詳細說明。 (如果您需要它但找不到解決方案,請提出單獨的問題。)

相關內容