shortpath
将当前路径简化为变量,比如,假如定义了GOPATH=~/gopath, W=$GOPATH/src/github.com/me/work,下面的代码定制PS1展示缩短的变量
shortpath () {
p=${PWD/#'/Users/me'/'~'}
p=${p/#'~/gopath'/'$GOPATH'}
p=${p/#'$GOPATH/src/github.com/me/work'/'$W'}
echo "$p"
}
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
PS1='\[\e[33m\]$(shortpath)\[\033[32m\]$(parse_git_branch)\[\033[00m\] \t \n '
swd
swd, ssh+working directory, 如果本地机器和远程机器都使用shortpath来简化路径表示,那么即使HOME路径不相同,也可以直接登录到远程机器的当前目录下
function swd {
local cur
cur=$(shortpath)
# -t: force terminal allocation
# slow
# ssh -t $D "exec bash --login -i -c 'cd $cur;exec bash --login -i'"
echo "cd $cur"|cat - /dev/tty|script -q /dev/null ssh $D
}
脚本的功能:获取短路径,然后ssh登录到远程机器($D
)并切换到这个短路径
Update: swd
有参数时执行命令
function swd {
local cur
cur=$(shortpath)
if [[ $# -gt 0 ]];then
# -q: quiet
ssh -q -t $D "exec bash --login -i -c 'cd $cur;$*'"
return
fi
# -t: force terminal allocation
# slow
ssh -t $D "echo Login shell...;exec bash --login -i -c 'echo Welcome,last login \$(last -1|head -n1);cd $cur;exec bash --login -i'"
# echo "cd $cur"|cat - /dev/tty|script -q /dev/null ssh $D
}
sync-profiles
基于mutagen-sync-projects.sh
创建文件同步,再也不怕机器私有文件无法同步了
#!/usr/bin/env bash
files=(~/.bash* ~/.ssh ~/.mutagen.toml ~/.mutagen.yml)
dir=$(dirname "$(realpath "$0")")
targetDir=${dir/#'/Users/home/me'/'~'}
for f in "${files[@]}";do
target=${f##'/Users/home/me'}
name=${target//'.'/'-'}
# remove prefix -
name=${name##'-'}
name=${name}-sync
mutagen-sync-projects.sh "$name" "$f" "$D:$targetDir/$target"
done