有没有办法将参数传递给正在运行的程序:
open -a /Applications/Utilities/Terminal.app ~/my_executable
我已经尝试过:
open -a /Applications/Utilities/Terminal.app ~/my_executable arg1 arg2
但这被解释为告诉终端打开
~/my_executable ~/arg1 ~/arg2.
我已经尝试过:
open -a /Applications/Utilities/Terminal.app '~/my_executable arg1 arg2'
但是它会选取 arg1 和 arg2,就好像它们是路径的一部分而不是参数一样。
我已经尝试过:
open -a /Applications/Utilities/Terminal.app ~/my_executable | xargs arg1 arg2
我也尝试过:
open -a /Applications/Utilities/Terminal.app ~/my_executable --args arg1 arg2
但是使用该标志,参数将被传递到终端。
我只能更改 Terminal.app 的参数([ ] 内的部分):
open -a /Applications/Utilities/Terminal.app [~/my_executable arg1 arg2]
可能最简单的方法是创建一个临时 shell 脚本,例如
$ echo "~/my_executable arg1 arg2" > /tmp/tmp.sh ; chmod +x /tmp/tmp.sh ; open -a Terminal /tmp/tmp.sh ; rm /tmp/tmp.sh
编辑:留下下面的原始答案,因为有些人似乎觉得它很有用,但请记住,这并不能真正回答OP的问题,这是将参数传递给使用
open
打开的应用程序,而不是传递给应用程序使用 Terminal.app 打开,该应用程序使用 open
打开。
您可以通过运行不带参数的
open
来找到答案:
% open Usage: open [-e] [-t] [-f] [-W] [-R] [-n] [-g] [-h] [-b <bundle identifier>] [-a <application>] [filenames] [--args arguments]
[...]
--args All remaining arguments are passed in argv to the application's main() function instead of opened.
[...]
你可以看到有一个选项
--args
你可以这样使用它:
open ./Untitled.app --args arg1 arg2 arg3
我在 el Capitan (10.11.3) 上测试了它,所以我不知道该选项是否存在于早期版本中。
是的,我知道。需要管理另一个脚本。 但想法不同。您不是在终端上工作,而是在脚本编辑器上工作。 (不是 bash 脚本,而是 AppleScript)
property testScript : "/tmp/sh.sh"
set input to display dialog "args?" default answer ""
log input
tell application "Terminal"
activate
do script testScript & " " & text returned of input
end tell
对于那些对 Paul R 的答案有疑问的人,请将
; rm /tmp/tmp.sh
添加到 tmp.sh 脚本本身。不要添加像 Maksim 这样的睡眠命令,因为这会产生竞争条件。
echo "~/my_executable arg1 arg2 ; rm /tmp/tmp.sh" > /tmp/tmp.sh ; chmod +x /tmp/tmp.sh ; open -a Terminal /tmp/tmp.sh
在参数之前使用
--args
开关。
open ./Terminal.app --args --your-args
来自文档:
--args: All remaining arguments are passed in argv to the application's main() function instead of opened.