bashスクリプトを実行しているときの「ターミナルプロセスグループを設定できません」エラー


13

init.elファイルに次の2行のコードがあります。

(setq shell-file-name "bash")
(setq shell-command-switch "-ic")

次のスクリプトを実行して、シェルスクリプトdmenu_pathを使用して実行可能ファイルのリストを取得しようとしました。

(defun dmenu-path-out ()
  (shell-command-to-string "dmenu_path"))

次のエラーが表示されます。

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
[
0ad
...

使用時にbashがそのエラーを返すのを防ぐにはどうすればよいshell-commandですか?


おそらく部分的に重複した質問stackoverflow.com/questions/9670209/...あなたのシェルはcygwinのbashのであればまだ解決策はないように思える
フリオ・

回答:


10

この-iフラグは、Bashが端末を必要とする対話モードで実行することを要求します。解決策は、shell-command-switch変数をデフォルト値(ちょうど)のままにすること-cです。

あなたが本当に対話モードでバッシュを実行する必要がある場合は、使用することによって、擬似端末でそれを実行する必要がありますstart-file-processprocess-connection-typeに結合していますt


これはうまくいきませんでした。
ディディエA.

わたしにはできる。例として、このコマンドはBashセッションを起動gnome-terminal、実行echo、および実行したままにして、新しいコマンドを受け取る準備ができています(start-file-process-shell-command "peekaboo" "*Messages*" "gnome-terminal -- bash -c 'echo Peekaboo!; bash'")。Elispコマンドからの出力はすべて*Messages*バッファーに送信されます。のstart-file-process-shell-command代わりに使用したことに注意してくださいstart-file-process。したがって、シェルプログラムへのパスを指定する必要はありません。
アーチスタントン

0

-ibashを取得してエイリアスを展開するために追加しましたか?その場合、/programming/12224909で指定されているように 、代わりに

(setenv "BASH_ENV" "~/.bashrc")

あなたの.emacsおよび

shopt -s expand_aliases

.bashrcで。前者はサブシェルで.bashrcを実行し、後者は非ログインbashシェルでのエイリアス展開を許可します。

エイリアスとshopt行を使用して別のシェルスクリプトを作成し、それをBASH_ENV値として使用することで、さらに改善できます。完全な〜/ .bashrcよりも高速に実行される可能性があります。


そこで修正の詳細を要約していただけますか?それ以外の場合、これは本質的にリンクのみの回答であるため、削除されるリスクがあります。
ドリュー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.