shell-command
en realidad funciona en la sintaxis bash de cadenas múltiples. Mi problema fue que shell-command
no conoce las variables de entorno bash, incluida PATH. Lo que hice: reemplacé todos "
con \"
en el script y lo puse en una cadena elisp, luego asigné algunos directorios a PATH. Aquí está el código, que arroja con éxito todos los ejecutables en el sistema al buffer *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)))
Todavía estoy interesado en cómo hacer compile
trabajo con scripts bash de cadena múltiple también.
Nota sobre la RUTA: No utilizar (getenv "PATH")
en la solución anterior, ya que, por lo que entiendo, los administradores de pantalla X (incluyendo xdm, gdm y kdm) do not run shell before Xsession, por lo que un emacs van de interfaz gráfica de usuario tendrán diferentes variables de entorno de los bash. Ejecuto emacs --daemon
en el inicio a través de cron, mis rutas están configuradas en /etc/profile
y ~/.profile
, por lo que Emacs no obtiene su ruta desde allí.
Steve Purcell propone un code (véase también la variante one y two de ella en SO) para asegurarse de que Emacs tiene las mismas variables de entorno, incluyendo el camino, como la cáscara.
si Mx región shell-command-en-falla , envíe un informe de error –