2012-12-11 86 views
21

嗨,我是SHELL腳本中的新成員。其實我在文件中有一個功能err()abc文件不與.sh擴展他們是簡單的文件,但與#!/bin/bash導入shell腳本函數

err() { 
echo "${1}" >&2 
} 

現在我將其導入不同的文件xyz

source abc 
someFunction(){ 
err "Failed to back up" 
} 

是否開始一個正確的導入方式?

回答

22

是的,你可以像你所提到的上述或類似:. FILENAME

文件不必與.sh

4

這很好,這裏有一些更多的提示來結束:

  1. 使用函數的命名約定,例如在函數名稱前加上f_,例如f_err。函數調用與其他命令沒有區別,這是給讀者的一個提示。它也減少了名稱衝突的可能性。

  2. 您只需要閱讀權限,並且您不需要#!/bin/bash(它只是一條評論)。

  3. 在Bash中,一些選項必須在函數解析之前設置。例如,shopt -s extglob必須在函數之前和之外完成,如果它使用擴展通配符。把它放在功能裏面已經太晚了。

  4. Bash不支持FPATH環境變量或自動加載(如Korn shell所做的那樣)。

2

您需要出口新創建的功能

abc末補充一點:

export -f err 
+0

你只需要導出功能,使其在一個子shell可用的(一個啓動通過運行另一個bash實例)。源文件後,其中定義的任何功能將在當前shell中可用。 – chepner