0

我在 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 中?)......

我的问题是:如何解决这个问题?

4

1 回答 1

2

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

directory=$(eval echo $directory)

在您尝试使用它之前。

于 2017-12-19T16:02:58.093 回答