Передача параметров в сценарий оболочки из сценария IDL
Я пытаюсь написать скрипт IDL, который называется, например, a.pro. В конце этого скрипта я хочу выполнить скрипт оболочки b. Я пытаюсь сделать это с помощью команды spawn. Но мне также нужно передать некоторые параметры (значения переменных) в этот сценарий оболочки из сценария IDL. Как я могу это сделать?
2 ответа
Команда, которую вы отправляете SPAWN
это просто строка; создайте строку так, как вам нравится. Я предпочитаю использовать коды формата C-style:
filename = 'output.log'
n_lines = 50
cmd = string(n_lines, filename, format='(%"tail -%d %s")')
; cmd = 'tail -50 output.log'
spawn, cmd, output
Есть два способа позвонить SPAWN
чтобы выполнить то, что вы хотите:
Назови сценарий, b
напрямую:
spawn, ['b', arg1, arg2], /noshell
Преимущества:
- Быстрее, потому что это не создает новый экземпляр
bash
, - Безопаснее, потому что вам не нужно избегать или приводить аргументы.
Формат как bash
строка терминала:
script_path = 'b'
cmd = strjoin([script_path, arg1, arg2], ' ')
spawn, cmd
Преимущества:
- Иногда проще, потому что вы можете просто использовать формат, который вы привыкли видеть
bash
,
В большинстве случаев вы должны вызывать скрипты и другие программы (кроме IDL) напрямую с spawn, /noshell
, потому что увеличение скорости является существенным, и безопасность может быть значительной.