2012-07-11 11 views
2

假設我們有一些在Linux計算機上運行 的腳本'm12'(我剛發明了這個名字)。如果它坐落在您的$ PATH,你可以很容易地從這樣的控制檯運行 :控制檯腳本使用配置文件的Unix方式是什麼?

m12 

它將使用默認參數工作。但是你可以運行它像一些定製的 這個腳本的工作:

m12 --enable_feature --select=3 

這是偉大的,它會工作。但我想創建一個配置文件~/.m12rc,所以我每次運行它時我都不需要指定--enable_feature --select=3。 它可以很容易地完成。

困難的部分是從這裏開始。

所以,我有~/.m12rc配置文件,但我怎麼開始m12沒有參數, 存儲在該配置文件。什麼是Unix的方式來做到這一點?我應該運行 這樣的腳本:

m12 --ignore_config 

還是有更好的解決方法?

下一步。假設我有一個配置文件~/.m12rc,我想從 文件中獲取一些參數,但想要稍微改變它們。我應該如何運行該腳本以及 腳本應該如何工作?

還有最後一個問題。腳本首先在當前目錄中查找.m12rc ,然後在~/,然後在/etc

我在問所有這些問題,因爲我在我的 small script中實現了配置文件,我想對設計做出正確的決定。

回答

4

E S Raymond的書'The Art of Unix Programming'討論了這樣的issues

您可以用--config-file=/dev/null覆蓋配置文件。

您通常使用的順序:

  • 全系統配置(/etc/m12/m12rc,或者只是/etc/m12)。
  • 用戶個人配置(~/.m12rc
  • 本地目錄配置(./.m12rc
  • 命令行選項

與覆蓋前面列出每個項目後面列出的項目。您應該能夠指定要在命令行上讀取的配置文件;可以說,這應該優先於其他選擇。考慮一下--no-system-config--no-user-config--no-local-config。許多腳本不保證系統配置文件。我開發的大多數腳本不會同時使用本地配置和用戶配置。但這是我腦海中的工作方式。

我包的標準選項的方法是有一個腳本在$HOME/bin(比如m12a),做對我來說:

#!/bin/sh 
exec m12 --enable_feature --select=3 "[email protected]" 

如果我想這些選項,我跑m12a。如果我想要一些其他選項,我使用必要的選項運行原始m12。我的個人bin目錄中有數百個文件(我的主機上大約有500個,Mac;其中一些是可執行文件,但許多是腳本)。

+0

謝謝!這是我想要得到的確切答案。 – bessarabov 2012-07-12 17:37:19

0

讓我分享我的經驗。我通常在腳本的開頭輸入配置文件。在配置文件我也處理所有的參數開關:

DEFAULT_USER=blabla 
    while getopts ":u" do 
     case $opt in 
     u) 
     export APP_USER=$OPTARG 
     ;; 
     esac 
    done 
    export APP_USER=${APP_USER-$DEFAULT_USER} 

然後腳本我只是用變量中,這讓我有具有相同腳本的輸入參數數目。

在你的情況下,我的成像你會移動「getopts」部分到腳本,並在源代碼配置文件(如果沒有切換跳過採購)。

你不應該把你的腳本配置文件等,它需要root權限來做到這一點,你簡單的可以在家裏使用配置文件。 如果你想反正把你的腳本與其他用戶共享,它應該去/ usr/share ...

另一個解決方案使用thor(ruby gem),它更簡單的方式處理輸入參數,避免工作在bash中獲得相同的結果例如getopts只支持單字母開關。

相關問題