【shell】短命令:shortpath,swd和sync-profiles

it2024-06-30  42

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
最新回复(0)