我正在学习 emacs lisp,我正在尝试使用它编写脚本。我写了一个脚本,它工作得很好,但我只是认为我在 bash 中做的很多事情我可以在 emacs lisp 中做。
大不了:我不确定我的启动过程是否正确
请建议/向我展示在我的脚本上编写脚本的 lisp 方式(例如):
#!/usr/bin/emacs --script
(message "Vision synchronization \n")
(let ((default-directory "/home/vision/"))
(shell-command "git pull;")
(princ (shell-command-to-string "git fetch upstream;git merge upstream/master;"))
(princ (start-process "Vision push \n" "git" "git" "push")))
(message "Gentoo-haskell synchronization \n")
(let ((default-directory "/home/gentoo-haskell/"))
(shell-command "git pull;")
(princ (shell-command-to-string "git fetch upstream;git merge upstream/master;"))
(princ (start-process "Gentoo-haskell push \n" "git" "git" "push")))
(message "Nengraphy synchronization \n")
(let ((default-directory "/home/nengraphy/"))
(princ (start-process "Nengraphy pull \n" "git" "git" "pull")))
(message "Gentoo synchronization \n")
(let ((default-directory "/usr/portage/"))
(message "Gentoo rsync (New files will be added, deprecated files will be deleted) : \n")
(princ (shell-command-to-string "rsync --recursive --links --safe-links --perms --times --compress --force --whole-file --delete --timeout=180 --exclude=/.git --exclude=/metadata/cache/ --exclude=/distfiles --exclude=/local --exclude=/packages rsync://209.177.148.226/gentoo-portage/ /usr/portage/"))
(message "We want to make extra-sure that we don't grab any metadata, since we don't keep metadata for the gentoo.org tree (space reasons)")
(shell-command "[ -e metadata/cache ] && rm -rf metadata/cache")
(shell-command "[ -e metadata/md5-cache ] && rm -rf metadata/md5-cache")
(message "the rsync command wiped our critical .gitignore file, so recreate it.")
(shell-command "echo \"distfiles/*\" > /usr/portage/.gitignore")
(shell-command "echo \"packages/*\" >> /usr/portage/.gitignore")
(message "profile formats fix")
(shell-command "echo \"profile-formats = portage-1\" >> /usr/portage/metadata/layout.conf")
(message "\"git add .\" will record all the changes to local files the git repo. So there must be no stray files.")
(shell-command "if [ ! -d profiles/package.mask ]
then
mv profiles/package.mask profiles/package.mask.bak || exit 4
install -d profiles/package.mask || exit 4
mv profiles/package.mask.bak profiles/package.mask/gentoo || exit 4
fi")
(princ (shell-command-to-string "git add ."))
(message "create a commit")
(shell-command "git commit -a -m \"gentoo updates `date` update\"")
(message "push these changes up.")
(princ (shell-command-to-string "git push origin master")))
(message "Gentoo verification \n")
(princ (shell-command-to-string "emerge --sync;"))
(message "Layman synchronization \n")
(princ (shell-command-to-string "layman -S;"))
谢谢你!