我在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:不能cd到〜/ Temp
错误消息。
请注意
#+CALL: testHomeDir("\~/Temp")
#+CALL: testHomeDir("\\~/Temp")
也不行。
我想~
字符在某个地方被转义(在Emacs中?在sh?中)...
我的问题是:如何解决这个问题?
答案 0 :(得分:2)
shell没有对它进行扩展,因为它是在Emacs中设置的,并且是文字字符串'〜'。为了获得扩展,您需要通过eval运行它:
directory=$(eval echo $directory)
在尝试使用它之前。