2014-04-22 23 views
0

我有我的.bash_profile這個加載登錄,但我不能得到它的工作這段粗魯的代碼。也許一些簡單的解決方法,但我',現在就盯着它看。 代碼:閱讀回覆,如果然後其他循環

# Simple backup when editing files with nano 
function bu() { 
    read -p "Backup >>"`basename $1`"<< b4 edit [Y/n]?" response 
    echo $response 
    response=$response${response,,} # tolower 
    if [[ $response =~ ^(yes|y|) ]]; then 
     mkdir -p ~/.backup 
     #cp -v "$1" ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup 
     cp "$1" ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup 
     echo ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup >> ~/.backup/bu_log.txt 
     nano "$1" 
    else 
     nano "$1" 
    fi 
} 

而且它有一個別名納米=「不」 所以,當我寫納米,它應該問我,如果我要備份的文件第一次(上是)或剛剛打開它納米直奔。 現在唯一發生的事情是,它不斷詢問問題和循環,最新進入nano。 CentOS是Linux的

+0

你定義一個函數'bu'其執行'nano',但你說你是走樣'nano'到'bu'。這不是一個無限循環嗎? – lurker

+0

請學習如何在SO中格式化代碼。我爲你修好了,但是你「解開了」它。 – lurker

+0

可能,但我希望它在我輸入nano時要求備份SomeFile.sh – b0red

回答

0

我想你想:

response=${response,,} 

你有

response=$response${response,,} 

它讓你response=Yy。這不符合你的正則表達式。

你也可以做shopt -s nocasematch

別名通常是麻煩。規則是「如果有疑問,請使用函數」。

nano() { 
    bu "[email protected]" 
} 
bu() (# Use a subshell to avoid having to reset shell options 
    shopt -s nocasematch 
    local base=${1##*/} 
    read -p "Backup >>${base}<< b4 edit [Y/n]?" response 
    case $response in 
    y*) 
     mkdir -p ~/.backup 
     local backup=~/.backup/"${base}-$(date +%Y%m%d%H%M`).backup" 
     cp "$1" "$backup" 
     echo "$backup" >> ~/.backup/bu_log.txt 
    ;; 
    esac 
    command nano "[email protected]" # Use "[email protected]" to allow you to pass more than one argument to nano 
) 
+0

試過了,但結果相同:( – b0red

+0

結果是什麼? – kojiro

+0

不,忘了註銷並重新登錄,但它仍在循環中當我刪除$ response ... – b0red

0

要調用納米recursivly,因爲你的別名納米= BU

所以儘量在劇本

nano "$1" 

改變線的

/usr/bin/nano "$1" 
的完整路徑

(或其中nano安裝在您的系統上)

2

由於nano是一個別名bu,鍵入nano運行你的函數,它調用nano,這是它的別名bu,這就要求nano,...

爲了運行實際nano編輯器,你需要爲該調用禁用別名擴展。使用command內置:

command nano "$1" 
+0

別名是如此奇怪,如果你在定義函數之前定義別名*,你會得到一個循環,如果你在定義函數後定義了別名*,別名將不會擴展功能 – kojiro

+0

很好,現在可以工作了。 – b0red