分享几个觉得有用的小 shell 函数。
1. scppath
在进行一些跨机器的操作时,每次 scp 总要手动去拼那个路径,首先从 PS1 拷贝粘贴用户名和主机名,然后再 pwd 拷贝粘贴当前目录,然后再 ls 拷贝粘贴要 scp 的文件名。好烦啊,所以就写了下面这个小函数来生成 scp 的文件路径,放到 ~/.bashrc 里。
function scppath()
{
local _IFS=$IFS
IFS=$(echo -en "\n\b")
local _file
for _file in $@; do
echo "\"$USER@$HOSTNAME:$PWD/$_file\""
done
IFS=$_IFS
}
2. cppath
同样可以有 cppath。
function cppath()
{
local _IFS=$IFS
IFS=$(echo -en "\n\b")
local _file
for _file in $@; do
echo "\"$PWD/$_file\""
done
IFS=$_IFS
}
3. mybackup
这个函数是偷懒备份用的。当写代码写到一半,不想或者不能 check in,但又想备份一下时,就用这个命令对文件或者目录进行自动的备份。
function mybackup()
{
local _bak_dir=~/history
local _path=''
mkdir -p $_bak_dir
local _IFS=$IFS
IFS=$(echo -en "\n\b")
for _path in $@; do
if [ -f $_path ]; then
cp $_path $_bak_dir/"$_path".`date +%Y-%m-%d.%H-%M-%S`
elif [ -d $_path ]; then
_path=`basename $_path`
tar -cvf $_bak_dir/$_path.`date +%Y-%m-%d.%H-%M-%S`.tar $_path
fi
echo "Backuped $_path to $_bak_dir."
done
IFS=$_IFS
}
前两个没看懂,最后一个用 git 不需要~
@依云 哈哈,看来你是 show git 来了,俺们 svn user 伤不起啊!
zsh 能补全的东西非常多,其中包括 scp 的路径补全。打完 scp user@server: 之后按 tab 就可以,前提是要设置好用 public key 认证。
@Chen Yufei 是啊,虽然有更强大的 shell,但我总是纠结于要不要去学,总觉得如果学很小众的东西,会浪费不少精力且助益不多。
我这里bash也能补全(设好public key之后)
只是至今为止,拼音补全还没能实现。
另外,reCAPTCHA 认错了然后我的留言消失了,幸好我还有 TextCache~
请问为什么要设置:
IFS=$(echo -en "\n\b")
@zhanxu 这样能正确处理文件或者目录名中包含空格的情况。