簡體   English   中英

如何在bash腳本中執行我的環境變量中的程序

[英]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”路徑
  • 在 .bashrc 中手動放置“my_program”路徑更好,因為它會在每次執行時保留

正確設置$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 ,不需要evalsource或其他任何東西。

使用查找

現在,假設您不知道您的程序在哪里,並且您不想在每台計算機上正確設置$PATH並且my_program的完整路徑在每台計算機上都不同(您確定沒有其他解決方案嗎?必須有一個這種情況的好理由,因為只有 1 或 2 個不同的可能目錄應該真的足夠了,並且可以通過正確設置$PATH輕松修復)。

那么當然你總能find你的程序。 但這並不是一個很好的解決方案。

它可能是這樣的:

full_path=`find /home/$USER -nowarn -name my_program 2> /dev/null`

但它的意思是:

  • 您確定不會有幾行輸出(這就是為什么我添加了-nowarn2> /dev/null以避免警告並將 stderr 上可能的輸出重定向到 /dev/null,但是如果 my_program 存在兩次呢?實例?)。 或者您也可以過濾find的輸出(僅第一行)。 但這確實是一項修補工作。

  • 它會很慢,即使您只在/home/$USER查找 my_program ,如本例所示。 一種解決方法是將這個命令的結果存儲在一個文件中,然后讀取這個文件的內容(如果不是空的)以便只運行一次find命令。 但這一切對於您只能通過正確設置$PATH輕松修復的事情來說真的很麻煩。

最后

另外,不要忘記給 my_program 執行權限,否則你將根本無法執行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM