2017-12-19 3 views
0

Ich habe diesen kleinen sh Skript unter org-Modus babel:org-Modus babel sh Skript + maskiert (?) ~ Char für Home-Verzeichnis?

#+NAME: testHomeDir 
#+BEGIN_SRC sh :var directory="./" 
set -e 
cd $directory 
ls | head -5 
#+END_SRC 

Hinweis: set -e ist es das Skript zu stoppen, sobald ein Fehler auftritt.

Das Skript gut mit vollständigem Pfad funktioniert:

#+CALL: testHomeDir("/home/picaud/Temp") 
#+RESULTS: 
:RESULTS: 
current issues.pdf 
AnnotatedPDF 
Bitbucket 
compareScript.wls 
Data 
:END: 

jedoch, wenn sie mit ~ (meinem Home-Verzeichnis) verwendet es nicht mehr funktioniert:

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

I Holen Sie sich die

sh: 4: cd: kann nicht cd ~/Temp

Fehlermeldung.

Bitte beachten Sie auch, dass

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

nicht arbeiten.

Ich denke, dass die ~ Charakter irgendwo entkommen ist ...

Meine Frage ist (in Emacs in sh?): Wie man das Problem lösen?

Antwort

2

Das ~ wird nicht von der Shell erweitert, da es innerhalb von Emacs gesetzt wird und die Literalzeichenfolge '~' ist. Um die Erweiterung zu erhalten, müssen Sie es durch eval:

directory=$(eval echo $directory) 

laufen, bevor Sie versuchen, es zu verwenden.

+0

Das funktioniert! Danke für die Klarstellung! –