1

私はemacslispを学んでいて、それを使ってスクリプトを書こうとしています。私はスクリプトを書きましたが、それはうまく機能しますが、代わりにemacslispで実行できるbashで作成することがたくさんあると思います。

ここで大したこと:開始プロセスが正しく機能するかどうかはわかりません

私のスクリプトでのスクリプトの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;"))

ありがとう!

4

1 に答える 1

0

これは実際には、厄介な elisp ラッピングを使用した単なる bash スクリプトです。このように elisp を使用するメリットはありません。実際に何かを計算するために elisp を使い始めるまでは、おそらく bash を使い続ける必要があります。

emacs を使用して、sed や awk で行うように、テキスト ファイルを開いてテキストを変更するスクリプトを作成できます。それはもう少し理にかなっています。この時点で、awk 構文を調べるよりも elisp でこれを行う方が速いでしょう。

どこかから始める必要がありますが、あなたがしていることは elisp には非常に不自然です。言語に本来向いていないことを強制するよりも、その言語の強みを生かして学習するほうがよい。

また、start-process はスクリプトでは意味がありません。スクリプトでは必要のない、進行中の通信を可能にするために、emacs 内でプロセスを開始します。

于 2012-06-21T03:47:24.970 に答える