使用sudo的org babel sh失败了



我正在使用org babel安装nvidia cuda。当我使用

时howver
#+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::,这是一个伪目录,是Tramp将其解释为Tramp一种使用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,我的uid0(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

,是的,您 can 都像您一样做,但这是过分的。

最新更新