
我有一個可以在位於文件位置時運行的應用程序,如下所示:
-$ 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
...如果不是,那麼您可以將工作目錄變更為包含依賴檔案的目錄,然後使用絕對路徑作為第二個元件來執行應用程式。