Подтвердить что ты не робот

Как передать аргументы командной строки программе с командой open?

Есть ли способ передать аргументы программе, запущенной через:

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]
4b9b3361

Ответ 1

Вероятно, самый простой способ - создать временную оболочку script, например.

$ echo "~/my_executable arg1 arg2" > /tmp/tmp.sh ; chmod +x /tmp/tmp.sh ; open -a Terminal /tmp/tmp.sh ; rm /tmp/tmp.sh

Ответ 2

Вы можете найти свой ответ, запустив 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 main() function instead of opened.

[...]

Вы можете видеть, что есть опция --args, которую вы можете использовать так:

open ./Untitled.app --args arg1 arg2 arg3

Я тестировал его на El Capitan (10.11.3), поэтому не знаю, присутствует ли опция в более ранних версиях.

Ответ 3

Да, я знаю. необходимо управлять другим script. но думают иначе. вы работаете не в терминале, а в редакторе Script. (не 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