org-mode babel sh script + escaped(?) ~ 主目录的字符?

org-mode babel sh script + escaped(?) ~ char for home directory?

我在 org-mode babel 下有这个小 sh 脚本:

#+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: can't cd to ~/Temp

错误信息。

另请注意

#+CALL: testHomeDir("\~/Temp")
#+CALL: testHomeDir("\~/Temp")

不工作也。

我猜 ~ 字符在某处被转义了(在 Emacs 中?在 sh 中?)...

我的问题是:如何解决?

~ 未被 shell 扩展,因为它是在 Emacs 中设置的,并且是文字字符串“~”。为了获得扩展,您需要 运行 通过 eval:

directory=$(eval echo $directory)

在您尝试使用它之前。