Сценарий 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)

прежде чем пытаться использовать его.

Другие вопросы по тегам