我正在使用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
,我的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
,是的,您 can 都像您一样做,但这是过分的。