2017-09-22 5 views
1
(insert "[" (shell-command-to-string "~/lombardi/http_fetch.sh") "]") 

Wie kann ich ein Argument an die http_fetch.sh-Funktion übergeben. Dieses Argument wird durch die Auswertung (elfeed-entry-link entry)String-Interpolation in Lisp-Anweisung

erreicht. Ich versuchte mit einem 'vor, aber endete mit einem Bash-Fehler.

Antwort

1

Verwenden concat die Zeichenfolge anhängen von Aufruf elfeed-entry-link bis zum Ende des Shell-Befehl resultierende:

(insert "[" 
     (shell-command-to-string 
     (concat "~/lombardi/http_fetch.sh " (shell-quote-argument (elfeed-entry-link entry)))) 
     "]") 

Der shell-quote-argument schützt den Befehl, falls das Ergebnis der elfeed-entry-link Schale Metazeichen oder Leerzeichen enthält. (EDIT:. Entfernt Handbuch zitierte ursprünglich hier vorgeschlagen und verwendet shell-quote-argument stattdessen dank der Kommentar von @phils)

Beachten Sie auch, dass das Ergebnis der shell-command-to-string wird höchstwahrscheinlich eine abschließende Newline umfassen, so sicher sein, zu strip it out, wenn Sie don Ich will es nicht.

+0

Versuchen Sie nicht, die Argumente manuell zu zitieren. Rufen Sie für jedes Argument ein shell-quote-Argument zu einem generierten Shell-Befehl auf. (Es ist im Allgemeinen eine gute Übung, dies zu tun, ob Sie denken, dass Sie müssen oder nicht.) – phils

+0

Danke! Ich habe die Antwort bearbeitet, um Ihren Rat einzubeziehen. –

0

Sie können format verwenden, um Strings zu interpolieren.

(insert "[" 
     (shell-command-to-string 
     (format "~/lombardi/http_fetch.sh %s" (elfeed-entry-link entry))) 
     "]") 

Wie Steve erwähnt, sollten Sie wirklich shell-quote-argument Sie behandeln, um sicherzustellen, verwenden Sie Leerzeichen und Zitate korrekt, wenn Sie das Argument übergeben.