shell-command
実際にはマルチストリングbash構文で動作します。私の問題は、shell-command
PATHを含むbash環境変数を知らないということでした。私がしたこと:スクリプト内のすべて"
を置き換え\"
て、それをelisp文字列に入れてから、いくつかのディレクトリをPATHに割り当てました。*Shell Command Output*
これは、システム内のすべての実行可能ファイルをバッファに正常に出力するコードです。
(let ((path "PATH='/usr/local/bin:/usr/bin:/bin'")
(command "IFS=: read -ra _dirs_in_path <<< \"$PATH\"
for _dir in \"${_dirs_in_path[@]}\"; do
for _file in \"${_dir}\"/*; do
[[ -x ${_file} && -f ${_file} ]] && printf '%s\n' \"${_file##*/}\"
done
done"))
(shell-command (concat path ";" command)))
compile
マルチ文字列のbashスクリプトを使用する方法にも興味があります。
PATHに関する注意:(getenv "PATH")
私が理解している限り、Xディスプレイマネージャー(xdm、gdm、kdmを含む)はXsessionの前にシェルを実行しないため、上記のソリューションでは使用しませんでした。そのため、GUIから実行されるemacsには異なる環境変数があります。バッシュのものから。私は起動時にcronを介して実行emacs --daemon
し、パスはとに設定されている/etc/profile
ため~/.profile
、EmacsはそこからPATHを取得しません。
Steve Purcellは、Emacsがシェルと同じ環境変数(PATHを含む)を持っていることを確認するためのコードを提案します(SOのバリアント1と2も参照)。