如何從終端機中的任何位置運行應用程式而無需使用完整路徑

如何從終端機中的任何位置運行應用程式而無需使用完整路徑

我有一個可以在位於文件位置時運行的應用程序,如下所示:

-$ cd home/myApps/app
-$ ./run.sh

我想從終端機中的任何位置呼叫 run.sh,而不是在完整路徑中,我嘗試使用 alais 並將以下程式碼新增至 bashrc 檔案。

alias mylovleyapp=/home/myApps/app/run.sh

問題是每當我想使用 mylovleyapp 運行應用程式時,程式都會傳回錯誤,因為 run.sh 依賴 myApps 資料夾中的另一個文件

我怎樣才能做到這一點?

答案1

通往羅馬的方式有很多種。

別名

如果您喜歡別名,可以如下操作:

alias mylovleyapp='(cd home/myApps/app && ./run.sh)'

大括號(...)使這兩個指令在子 shell 中運作。因此,一旦程式結束,您的當前目錄將不會更改。

PATH 中的包裝腳本

相反,您可以建立包裝器腳本並將其放置在您的搜尋中的資料夾中PATH,例如,~/.local/bin或者~/bin如果您是唯一需要存取權限的用戶,或者/usr/local/bin如果所有用戶都需要存取權限。然後您需要做的就是輸入腳本的名稱來啟動程式。

該腳本可以是您通常啟動程式時執行的操作:

#!/usr/bin/env bash
cd home/myApps/app
./run.sh

例如將該腳本儲存為~/.local/bin/mylovleyapp.使腳本可執行,以便可以運行:

chmod +x ~/.local/bin/mylovleyapp

如果~/.local/bin不存在,您必須建立它,然後登出然後重新登入以將其自動包含在您的PATH.從現在開始,只需mylovleyapp在終端機中輸入即可運行您的應用程式。

答案2

因為OP沒有提供範例腳本,所以我將製作一個。它會做一件事。ls在腳本目錄下運行。

是的,我知道你可以不ls使用./.但對於這個例子,我假裝它是必需的,以演示使用腳本當前目錄的腳本。

#!/usr/bin/env bash
ls ./

將該腳本儲存在某處。我將其另存為/home/ubuntu/test/myscript.使其可執行chmod +x /home/ubuntu/test/myscript。現在cd到腳本所在的目錄(例如,cd /home/ubuntu/test),並使用以下命令執行腳本./myscript

ubuntu@computer:~/test$ ./myscript
myscript someRandomFile

到目前為止,一切都很好。但現在讓我們從不同的目錄運行它。對於此範例,我將從根目錄 ( /) 運行它。

ubuntu@computer:~/test$ cd /
ubuntu@computer:/$ /home/ubuntu/test/myscript
bin  dev home lib   lib64  lost+found mnt proc run  snap sys usr
boot etc init lib32 libx32 media      opt root sbin srv  tmp var

哎呀。我們希望它列印腳本所在位置的文件,而不是使用者所在的位置。在我們找到解決方案之前,先思考一下為什麼它會暫時這樣做。答案很簡單。./是相對於用戶的目前目錄,而不是腳本之一。

要從腳本內部取得腳本的目錄,我們將查看這個堆疊溢位問題

它的要點很簡單:script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"取得腳本的目前目錄,並將其儲存在變數 中script_dir

讓我們相應地更新腳本。我們的腳本現在是這樣的:

#!/usr/bin/env bash
script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
ls "$script_dir"

讓我們運行一下,看看它是否有效:

ubuntu@computer:/$ /home/ubuntu/test/myscript
myscript someRandomFile

有用!它會列印腳本目錄中的文件,即使您與腳本不在同一目錄中,我們就完成了。整體思路很簡單。在腳本中,./指的是使用者的目錄。"$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"指腳本所在的目錄。

答案3

您需要將應用程式路徑新增至 PATH 變數。若要暫時執行此操作,請前往您的應用程式所在的目錄,然後:

PATH=.:$PATH

現在您可以從任何地方調用您的應用程序,而無需輸入其完整路徑。如果關閉終端,此設定將會遺失。

要永久設定它,您需要編輯 .bashrc 檔案並將 :/home/myApps/app 新增到 PATH 末尾。儲存新的 .bashrc 文件,然後:

source .bashrc

答案4

因此,您需要將工作目錄變更為目標應用程式所在的目錄,然後執行該應用程序,以便它可以找到依賴檔案。

我認為您可以透過在別名中給出兩個單獨的命令來做到這一點:一個用於更改目錄,另一個用於執行程序,用分號分隔。

所以你的.bashrc補充應該是:

alias mylovleyapp='cd /home/myApps/app; ./run.sh'

假設依賴檔案位於/home/myApps/app...如果不是,那麼您可以將工作目錄變更為包含依賴檔案的目錄,然後使用絕對路徑作為第二個元件來執行應用程式。

相關內容