Сценарий babel sh в режиме org + escape-(?) ~ char для домашнего каталога?
У меня есть этот маленький сценарий sh под babe в режиме org:
#+NAME: testHomeDir
#+BEGIN_SRC sh :var directory="./"
set -e
cd $directory
ls | head -5
#+END_SRC
Замечания: set -e
есть ли остановить сценарий, как только возникает ошибка.
Скрипт хорошо работает с полным путем:
#+CALL: testHomeDir("/home/picaud/Temp")
#+RESULTS: :RESULTS: current issues.pdf AnnotatedPDF Bitbucket compareScript.wls Data :END:
Однако при использовании с ~
(мой домашний каталог) он больше не работает:
#+CALL: testHomeDir("~/Temp")
Я получаю
Sh: 4: CD: не могу перейти к ~/Temp
сообщение об ошибке.
Пожалуйста, обратите внимание, что
#+CALL: testHomeDir("\~/Temp")
#+CALL: testHomeDir("\\~/Temp")
тоже не работают.
Я думаю, что ~
персонаж куда-то сбежал (в Emacs? в sh?)...
Мой вопрос: как это исправить?
1 ответ
Решение
Оболочка ~ не раскрывается оболочкой, потому что она устанавливается в Emacs и является литеральной строкой '~'. Чтобы получить расширение, вам нужно запустить его через eval:
directory=$(eval echo $directory)
прежде чем пытаться использовать его.