Emacs Mx コンパイルは、.bashrc に設定されたエイリアスを認識しません。Mx シェルを使用してからエイリアスを入力すると、問題ありません。/etc/profile、~/.profile、~/bash_env から .bashrc を調達しようとしましたが、考えられるものは何でも役に立ちませんでした。
私は Emacs 23 と Ubuntu 11 を使用しています。デスクトップ ボタンから /usr/bin/emacs %F を使用して emacs を起動します。
Emacs は親プロセスから環境を継承します。どのように Emacs を起動していますか? コマンドラインから、またはその他の方法で?
次の場合:
M-xbashをコンパイルRET C-a C-k-i -c your_alias RET
bash をインタラクティブ シェル (-i オプション) として呼び出すと、.bashrc エイリアスが読み取られるはずです。
M-x編集:シェルコマンドとM-xコンパイルの両方が、call-processを介して劣ったシェルでコマンドを実行すると思います。.emacs で次のことを試してください (または単に評価してください):
(setq shell-file-name "bash")
(setq shell-command-switch "-ic")
M-x上記の評価の後、シェルコマンドとM-xコンパイルの両方で使用するために .bashrc エイリアスが取得されることに気付きました。
M-xyour_aliasをコンパイルしますRET RET
その後、動作するはずです。
私の環境: Emacs 24.1 (pretest rc1)、OSX 10.7.3
Keith Flower の答えは機能しますが、.bashrc が他の場所に不必要にロードされているため、速度が低下する可能性があります (おそらく、私のコンピューターの電力が十分に不足しているわけではありませんが、autocomplete.el を使用しようとすると、emacs はほとんど使用できませんでした)。
別の方法は、shell-command-switch
必要な機能だけをローカルで変更することです。これは、emacs の「アドバイス」機能を使用して、これらの関数のラッパーを作成することで実行できます。を変更する例を次に示しますcompile
。
;; Define + active modification to compile that locally sets
;; shell-command-switch to "-ic".
(defadvice compile (around use-bashrc activate)
"Load .bashrc in any calls to bash (e.g. so we can use aliases)"
(let ((shell-command-switch "-ic"))
ad-do-it))
.bashrc を使用する関数ごとに同様の「アドバイス」を記述する必要があります (たとえば、 に対しても同じアドバイスを定義する必要がありました)。上記をコピーして、上記を別の関数名にrecompile
置き換えるだけです。compile
あなたは emac の bash-completion が好きかもしれません:
https://github.com/szermatt/emacs-bash-completion
コンパイルのミニバッファーとシェルモードで、エイリアスのタブ補完を使用できるようになります。
楽しみ !
(彼らはここでそれについて話しますEmacsシェルモードでのBashオートコンプリート)
コンパイルコマンドはシェルを介して解釈されないと思います.emacsによって実行されるだけです(つまり、エイリアス、シェル関数、およびその他のシェル固有のものは考慮されません)。
正しい環境を提供するシェルスクリプトにコンパイルコマンドをラップしてみてください。
これは、次の形式の本格的なシェルスクリプトを使用して行うことができます
#!/bin/bash
source "~/.bashrc"
my_command
または、次の形式のコンパイル コマンドを使用して、emacs で直接実行します。
bash -c "source ~/.bashrc; my_command"
シェル コマンドを実行するときに emacs に bash エイリアスとカスタム関数を認識させる方法はありますか? を参照してください。すべての .bashrc を実行せず、これらのエラー メッセージを作成しない修正の場合:
bash: 端末プロセス グループを設定できません (-1): デバイスの ioctl が不適切です bash: このシェルにはジョブ制御がありません