我的.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。 现在唯一发生的事情就是它不断提出问题和循环,更新的是纳米。 CentOS是linux
答案 0 :(得分:2)
由于nano
是bu
的别名,因此输入nano
会运行您的函数,该函数调用nano
,这是bu
的别名,调用nano
nano
,...
要运行实际 command
编辑器,您需要为该调用禁用别名扩展。使用command nano "$1"
内置:
{{1}}
答案 1 :(得分: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
)
答案 2 :(得分:0)
你正在以递归方式调用nano,因为你别名为nano = bu
所以尝试更改脚本中的行
nano "$1"
到
的完整路径/usr/bin/nano "$1"
(或系统上安装nano的地方)