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

어떻게 http_fetch.sh 함수에 인수를 전달할 수 있습니까? 이 인수는 다음을 통해 평가되었습니다. (elfeed-entry-link entry)lisp 구문 내에서 문자열 보간

'앞에 사용했지만 bash 오류가 발생했습니다.

답변

1

사용 concat는 쉘 명령의 끝에 elfeed-entry-link를 호출 결과 문자열을 추가합니다 :

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

elfeed-entry-link의 결과가 쉘 메타 문자 또는 공백이 포함되어 경우에 명령을 보호합니다. (편집 :. 제거 된 매뉴얼은 @phils에서 주석으로, 원래는 여기에 제안 대신 shell-quote-argument을 사용하여 감사의 말을 인용)

참고도 shell-command-to-string의 결과가 가장 가능성이 마지막 개행 문자를 포함 할 것이다, 그래서 strip it out해야합니다 만약 당신이 돈 그걸 원해.

+0

인수를 수동으로 인용하지 마십시오. 생성 된 쉘 명령의 각 인수에 대해'shell-quote-argument'를 호출하십시오. (당신이 필요하다고 생각하든 그렇지 않든간에 일반적으로 이것을하는 것이 좋습니다.) – phils

+0

고마워요! 귀하의 조언을 포함하도록 답변을 편집했습니다. –

0

format을 사용하여 문자열을 보간 할 수 있습니다. 스티브 언급으로

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

, 당신은 정말 당신이 인수를 전달할 때 제대로 공간과 따옴표를 처리 할 수 ​​있도록 shell-quote-argument를 사용해야합니다.