org babel sh используя sudo не удалось - PullRequest
0 голосов
/ 19 февраля 2019

Я использую org babel для установки nvidia cuda.Однако когда я использую

#+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

1 Ответ

0 голосов
/ 20 февраля 2019

Как я упоминал выше, в самом скрипте cuda должна быть какая-то ошибка, в частности строка 437.Вот где вы должны искать решение вашей проблемы.

РЕДАКТИРОВАТЬ: Я посмотрел на сценарий: он использует переменную $ XTERM, которая, кажется, не определена.Фактически, строка 437 имеет вид

                exec $XTERM -title "$label" -e "$0" --xwin "$initargs"

, и $ XTERM заменяется ничем, оставляя -title в качестве «команды» для выполнения и вызывая ваше сообщение об ошибке.Предполагается, что XTERM определен в цикле выше (строки 428-434), но, похоже, он вообще не устанавливает его в среде emacs (и я не могу понять, почему он установил бы его в приглашении оболочки в этом случае).Обычно я бы посоветовал вам выполнить его с bash -x, чтобы узнать больше, но я не уверен, что оно того стоит.

Возможно, вы захотите попробовать выполнить с опцией --nox11, которая должна обойти этовесь раздел.

Поскольку он работает из командной строки, почему бы не выполнить его таким образом и не покончить с этим?Зачем вам нужно запускать его из исходного блока?


Однако я также хотел бы отметить, что вам не нужно использовать sudo в теле блока кода: указав :dir /sudo:: говорит "выполнить тело в каталоге /sudo::, который является псевдо-каталогом, который интерпретируется 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

И, да, вы можете сделать то же самое, что и вы, но это излишне.

...