找不到Emacs shell命令

找不到Emacs shell命令,shell,emacs,Shell,Emacs,我在Mac OS X 10.5.8上工作。我正在努力学习emacs。我对它非常陌生,今天我尝试从emacs中输入shell命令。我输入了pdflatex文件名。然而,它给了我一个错误的说法 /bin/bash: pdflatex: command not found 我已经安装了LaTeX,pdflatex可以从终端的命令行正常工作 我在.bash_profile文件中定义的命令lsd也会出现类似错误。这在终端的命令行上也可以正常工作 命令ls在emacs shell中运行良好 有人知道会发生

我在Mac OS X 10.5.8上工作。我正在努力学习emacs。我对它非常陌生,今天我尝试从emacs中输入shell命令。我输入了
pdflatex文件名
。然而,它给了我一个错误的说法

/bin/bash: pdflatex: command not found
我已经安装了LaTeX,pdflatex可以从终端的命令行正常工作

我在
.bash_profile
文件中定义的命令
lsd
也会出现类似错误。这在终端的命令行上也可以正常工作

命令
ls
在emacs shell中运行良好

有人知道会发生什么吗

如何让emacs识别终端中命令行上正常工作的所有命令。 我是否可以使emacs shell和终端命令行使用的环境完全相同? 如果是,你有什么理由不建议这样做吗?我对bash和emacs都知之甚少


非常感谢。

Emacs shell可能在与终端命令行不同的环境中工作。比较
env
在Emacs外壳内运行和在终端中运行时的输出。请特别注意
shell
命令帮助中的
PATH

值:

使用的程序来自变量“explicit shell file name”, 或者(如果为nil)来自ESHELL环境变量, 或者(如果为零)来自“shell文件名”。 如果存在文件“~/.emacs\u SHELLNAME”或“~/.emacs.d/init\u SHELLNAME.sh”, 它是作为初始输入提供的(但这可能会由于定时而丢失) 错误,如果shell在启动时丢弃输入)。 缓冲区处于Shell模式,提供发送输入的命令 以及控制外壳的主体。请参阅“shell模式”。 另请参见变量“shell提示模式”


因此,您可以创建符号链接
~/.emacs\u bash
(对于bash)或
~/.emacs\u zsh
(对于zsh)。或者将变量
显式shell文件名
设置为指向
~/.bash_profile
~/.bashrc
~/.zshrc
,无论您使用哪个变量,或者您可以播放哪个
ESHELL
环境变量。

根据以下内容。如果从shell启动emacs,它将继承shell的环境变量。因此,只需从您最熟悉的shell启动emacs即可自动设置环境变量。例如:

cd /file_path
emacs file_name

谢谢你是对的;Emacs外壳具有不同的环境。我使用
M-x setenv
更改了emacs shell的路径。pdflatex在emacs外壳中工作。但是,我在.bash_概要文件中定义的命令
lsd
不起作用。是否有任何方法可以使环境相同..bash_配置文件仅为您的登录shell加载。如果要自定义常规Shell(如xterm windows或Emacs Shell),则需要将自定义项放在.bashrc中。许多人将从.bash_配置文件中获取.bashrc,这样您就可以在登录shell中获得所有自定义设置,但只能在常规shell中获得.bashrc中的自定义设置。@Tyler-谢谢您的回复。我打开了.bash_配置文件并将其保存为.bashrc文件。但是,
lsd
命令仍然不起作用。奇怪。每次我启动emacs shell时,bashrc都会自动为我加载。也许可以尝试一些调试行—在.bashrc中,添加:echo“bashrc-loaded”,在.bash\u概要文件中,添加:echo“bashprofile-loaded”,然后在emacs中调用一个新的shell:M-xshell。如果您看到一条或两条回显行,您将知道每次打开新shell时emacs读取的内容。默认情况下,emacs shell命令(M-!)不是交互式的,因此bash不会加载.bashrc。您可以通过将
(setq shell命令开关“-ic”)
添加到.emacs init文件来更改此设置。i告诉bash是交互式的,这使它加载~/.bashrc文件。这是一个很容易解决的问题,但是在运行快速shell命令时,~/.bashrc中可能有您不需要的东西。在这种情况下,最好设置BASH_ENV环境变量,以便更好地控制所发生的事情。在我的SpaceMac上(在macOS上),我需要为BASH shell设置ANDROID_SDK_根。正如Adam提到的,我创建了~/.emacs\u bash文件并添加了“export-ANDROID\u-SDK\u-ROOT=~/Library/ANDROID/SDK”。它起作用了!