我正在编写一个脚本,以通过ssh将名称中带有空格的完整文件路径传递给远程计算机,该计算机需要使用iTerm运行。它需要通过将AppleScript嵌入到Shell脚本中来实现,因此我可以控制iTerm,创建新的拆分视图等。
我已经将我的脚本简化为纯粹不起作用的部分。出于演示目的,因此这里的人们也许可以尝试其他方法,我将有问题的命令更改为“ cd”命令,因为错误是相同的(由于路径中的空格而无法找到路径)
#!/bin/bash
PATH="$1"
ssh server@192.168.50.4 "osascript \
-e 'tell application \"iTerm\"' \
-e 'activate' \
-e 'set newWindow to (create window with default profile)' \
-e 'tell first session of current tab of current window' \
-e 'write text \"cd "$PATH"\"' \
-e 'end tell' \
-e 'end tell'"
如果路径中没有空格,这可以正常工作。远程计算机打开一个iTerm窗口,并且路径更改为cd path。但是,如果名称中有空格,例如…
Volumes/Work/My Folder With Spaces
…iTerm用-bash: cd: Volumes/Work/My: No such file or directory
我尝试使用$ @并在$ 1变量和/或$ PATH变量周围加上引号。另外,我知道有一个AppleScript命令,类似于“(POSIX路径)的引号形式”,但我不知道如何在bash脚本中将其集成到这里。
答案 0 :(得分:0)
我刚弄清楚!我正在编写的脚本是After Effects渲染脚本。事实证明,如果我使用EOF而不是使用-e开头每一行,它将变得更加简单。它解决了我在嵌套引号等方面遇到的所有问题。
#!/bin/bash
ssh server@192.168.50.4 osascript <<EOF
tell application "iTerm"
activate
set newWindow to (create window with default profile)
select first window
tell current session of current window
end tell
tell first session of current tab of current window
write text "/Applications/Adobe\\\\ After\\\\ Effects\\\\ 2020/aerender -project \"$1\" -sound ON"
end tell
end tell
EOF