我有以下命令:
!nohup fswatch -o ~/Notes -e "\\.git.*" | xargs -n 1 -I {} sh ~/auto_commit.sh > /dev/null 2>&1 &
我想内联auto_commit.sh
文件中的内容:
cd ~/Notes
git add -A
git commit --allow-empty-message -am ""
有办法做到这一点吗?
答案 0 :(得分:1)
我最终得到的解决方案是:
nohup fswatch -o ~/Notes -e "\\.git.*" | xargs -n 1 -I {} sh -c 'cd ~/Notes; git add -A; git commit --allow-empty-message -m ""' > /dev/null 2>&1 &'
感谢Will Barnwell和你的帮助。
此外,这是一个vim脚本,所以格式必须略有不同(如果其他人正在寻找类似问题的解决方案):
autocmd BufWinEnter *.note silent! execute '!nohup fswatch -o . -e "\\.git.*" | xargs -n 1 -I {} sh -c ''git add -A; git commit --allow-empty-message -m ""'' > /dev/null 2>&1 &'
请注意,Barnwell错误的地方是{..}
不是子shell,sh -c
命令需要字符串。所以花括号是不必要的,在我的例子中添加了一个不需要的git提交消息。
此外,当在vim脚本中使用vim execute
函数时,整个命令必须用引号括起来。加倍单引号(不是双引号)让execute
函数接受参数作为普通字符串,并且工作正常。