Emacs—将分号命令行参数合并到elisp中

Emacs—将分号命令行参数合并到elisp中,emacs,elisp,Emacs,Elisp,由于分号是elisp中的注释分隔符,是否有其他方法将命令行参数(包含分号)合并到elisp函数中?命令行在终端中运行良好,但我不知道如何将其作为包含start process语句的函数的一部分使用——Emacs无法识别分号后面的右括号/引号,加载时Emacs自然会抱怨 ssh user@server -t "cd /some/directory; bash --login" 以下是提供工作命令行的相关线程的链接: 下面是最终将被合并到包含start process的函数中的命令行参数。在我今天

由于分号是
elisp
中的注释分隔符,是否有其他方法将命令行参数(包含分号)合并到
elisp
函数中?命令行在终端中运行良好,但我不知道如何将其作为包含
start process
语句的函数的一部分使用——Emacs无法识别分号后面的右括号/引号,加载时Emacs自然会抱怨

ssh user@server -t "cd /some/directory; bash --login"
以下是提供工作命令行的相关线程的链接:

下面是最终将被合并到包含
start process
的函数中的命令行参数。在我今天下午/晚上尝试的所有变体中,以下命令行是唯一一个在终端中成功运行的命令行,它可以一次性登录到iphone并进入特定目录,即
username@server.name:/path/
在iphone上不起作用。当一切都启动并运行时,启动进程将与
rsync
一起用于单向同步

/Users/HOME/.0.data/.0.emacs/elpa/bin/sshpass -p 'alpine' ssh -p '2222' -l root localhost -t "cd /var/mobile/Applications/F30B1574-5979-4764-8742-7F9DB2863094/Documents/.0.data; bash --login"

我感到惊讶的是,这不能按原样工作,因为Emacs字符串当然可以包含分号,但是如果它引起了问题,您应该能够修改命令以使用
&
而不是

ssh user@server -t "cd /some/directory && bash --login"
仅当
cd
成功时,此命令才会运行
bash--login
,返回值为0。我相信这是你的意图


有关详细信息,请参阅Bash的文档。(我所熟悉的所有其他非Windows shell也支持此语法)。

请注意,您不应该使用分号将命令链接在一起,除非您希望在前一个命令失败时仍能执行后续命令。在大多数情况下,错误会中止整个序列,因此您应该养成默认使用
&&
的习惯。您对
启动进程的调用是什么样子的?您确定没有在字符串中留下一些未转义的双引号吗?@phils--需要合并rsync的start process函数尚未运行,但这里有一个草稿:
(start process“rsync process”“*rsync*”“/usr/bin/rsync”“--dry run”“--delete”“-arzh”“/Users/HOME/.0.data/”“--rsh=\)/Users/HOME/.0.data/.0.emacs/elpa/bin/sshpass-p'alpine'ssh-p'2222'-l root localhost\'''-t''cd/var/mobile/Applications/F30B1574-5979-4764-8742-7F9DB2863094/Documents/.0.data&&bash-login“
最后两个参数是传递给ssh还是传递给rsync的?在任何情况下,如果我将您的
&
更改为
我认为Emacs读取整个表达式没有任何问题。(我从2014-05-03运行Emacs trunk。)@phils@Hmmm。你说得对,现在分号可以用了。我以前肯定用过一个或多个引号出错;然而,我没有保留旧的草稿。至于rsync,我真的不知道如何让它工作——它可以在两个本地目录下正常工作——我在Google上找不到通过ssh处理远程目标的例子,只是一个远程源。从命令行看,这个简单的版本是这样的:
/usr/bin/rsync--dry run--delete--arvzh--progress/Users/HOME/.0.data//Volumes/data/OFFICE/06_28_2014
我不认为ssh有什么不同。你是说你可以成功地向一个方向转移,但不能向另一个方向转移?