[英]how to execute program which is in my environment variable in a bash script
我只是在學習 bash,但我制作的腳本正在運行(盡管結果適中,但我為此感到非常自豪),除了一個小細節:
我寫了一個 bash 腳本,最終應該執行一個程序。 這個程序在我的環境變量中是已知的,所以當我寫這行時:
my_program -b result.dat
程序直接以結果文件作為輸入執行(並以批處理模式)。
我想在我的腳本結束時執行這個程序,所以我只需要執行我的腳本,讓它進行計算,最后用一些選項執行 my_program
#!/bin/bash
#calculations
my_program result.dat
經過一番搜索,我找到了一個適合的命令
eval my_program
env my_program
source my_program
bash my_program
每次結果都一樣
=> my_program: command not found
=> my_program: no such file or directory
有什么辦法嗎?
提前感謝您的時間
編輯
我可以編寫 my_program 的整個路徑(它可以工作),但我正在尋找一種可以在另一台可以有另一條路徑的計算機上工作的解決方案。
我的想法是知道程序的名稱,腳本可以搜索環境變量並檢索程序的路徑。 這能做到嗎?
最佳解決方案 - zezollo
$PATH
做你想做的最好的方法是正確設置$PATH
,例如將包含my_program
的目錄列在$PATH
。
要查看$PATH
的內容,只需在控制台中鍵入echo $PATH
。
要將一個或多個目錄添加到$PATH
您可以在控制台中鍵入:
$ export PATH=/home/one/more/path/:/yet/another/path/:$PATH
但這僅適用於您當前的控制台會話。
您肯定希望每次啟動新控制台時都以相同的方式設置此$PATH
:然后您可以將這一行添加到您自己的配置文件中的 .bashrc 文件中。
當然,您必須在要使用程序的每台計算機上設置$PATH
。 但是我會選擇這個解決方案,因為它完全屬於程序的正常“安裝”過程:如果您希望從另一個腳本調用一個程序,最好告訴另一個腳本您的程序在哪里。 設置$PATH
是一種直接的方法。
正確設置$PATH
,您的腳本只需要直接調用my_programm -b my_file
,不需要eval
或source
或其他任何東西。
現在,假設您不知道您的程序在哪里,並且您不想在每台計算機上正確設置$PATH
並且my_program
的完整路徑在每台計算機上都不同(您確定沒有其他解決方案嗎?必須有一個這種情況的好理由,因為只有 1 或 2 個不同的可能目錄應該真的足夠了,並且可以通過正確設置$PATH
輕松修復)。
那么當然你總能find
你的程序。 但這並不是一個很好的解決方案。
它可能是這樣的:
full_path=`find /home/$USER -nowarn -name my_program 2> /dev/null`
但它的意思是:
您確定不會有幾行輸出(這就是為什么我添加了-nowarn
和2> /dev/null
以避免警告並將 stderr 上可能的輸出重定向到 /dev/null,但是如果 my_program 存在兩次呢?實例?)。 或者您也可以過濾find
的輸出(僅第一行)。 但這確實是一項修補工作。
它會很慢,即使您只在/home/$USER
查找 my_program ,如本例所示。 一種解決方法是將這個命令的結果存儲在一個文件中,然后讀取這個文件的內容(如果不是空的)以便只運行一次find
命令。 但這一切對於您只能通過正確設置$PATH
輕松修復的事情來說真的很麻煩。
另外,不要忘記給 my_program 執行權限,否則你將根本無法執行它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.