Emacs 使用sudo的org babel sh失败

Emacs 使用sudo的org babel sh失败,emacs,org-babel,Emacs,Org Babel,我正在使用OrgBabel安装NvidiaCuda。但是当我使用 #+BEGIN_SRC sh :dir /sudo:: sudo /home/oo/Downloads/cuda_10.0.130_410.48_linux.run #+END_SRC 评估失败,原因是: `/home/oo/Downloads/cuda_10.0.130_410.48_linux.run: 437: exec: -title: not found 正如我上面提到的,cuda脚本本身肯定有一些错误,尤其是第43

我正在使用OrgBabel安装NvidiaCuda。但是当我使用

#+BEGIN_SRC sh :dir /sudo::
sudo /home/oo/Downloads/cuda_10.0.130_410.48_linux.run
#+END_SRC
评估失败,原因是:

`/home/oo/Downloads/cuda_10.0.130_410.48_linux.run: 437: exec: -title: not found

正如我上面提到的,cuda脚本本身肯定有一些错误,尤其是第437行。这就是你应该寻求解决问题的地方

编辑:我查看了脚本:它使用了变量$XTERM,该变量似乎没有定义。事实上,第437行是

                exec $XTERM -title "$label" -e "$0" --xwin "$initargs"
$XTERM被零替换,留下
-title
作为执行和触发错误消息的“命令”。XTERM应该在上面的循环中定义(第428-434行),但在emacs环境中似乎根本没有设置它(我不明白为什么在这种情况下它会在shell提示符中设置它)。通常,我会建议您使用
bash-x执行它,以了解更多信息,但我不确定它是否值得

您可能希望尝试使用
--nox11
选项执行,该选项应绕过整个部分

既然它是从命令行工作的,为什么不这样执行它并用它来完成呢?为什么需要从源代码块运行它


但是,我还想指出,您不需要在代码块的主体中使用
sudo
:指定
:dir/sudo::
在目录
/sudo::
中执行主体,该目录是一个伪目录,被解释为使用
sudo
权限打开文件的方法,然后在该上下文中执行源块主体:

#+BEGIN_SRC sh :dir /sudo::
pwd
#+END_SRC

#+RESULTS:
: /root

#+BEGIN_SRC sh :dir /sudo::
id
#+END_SRC

#+RESULTS:
: uid=0(root) gid=0(root) groups=0(root)  context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
如您所见,在
:dir/sudo::
上下文中,我的工作目录是
/root
,我的
uid
0(root)

或者,您可以在块体中使用sudo并省略
:dir
规范:

#+BEGIN_SRC sh
sudo id
#+END_SRC

#+RESULTS:
: uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

是的,您可以同时执行这两项操作,但这太过分了。

您是否尝试在组织模式之外执行它,例如在shell提示符下?这个错误来自CUDA脚本,而不是巴贝尔。是的,我从英伟达CUDA网站下载了脚本。因此,脚本在外部运行没有问题。但是,在使用组织模式进行评估时,peply的.Tnansk失败。