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="bu" があるため、nano を書き込むと、最初にファイルをバックアップするか (はい)、nano ですぐに開くかを尋ねられます。今起こっている唯一のことは、質問をしてループし続けることです。新しいものはnanoに行きます。CentOS は Linux

4

3 に答える 3

0

私はあなたが欲しいと思います:

response=${response,,}

あなたが持っている

response=$response${response,,}

あなたを取得しますresponse=Yy。それはあなたの正規表現と一致しません。

することもできますshopt -s nocasematch

エイリアスは通常問題です。「迷ったら関数を使う」が鉄則です。

nano() {
  bu "$@"
}
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 "$@" # Use "$@" to allow you to pass more than one argument to nano
)
于 2014-04-22T17:21:49.577 に答える