Передача параметров в сценарий оболочки из сценария 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, потому что увеличение скорости является существенным, и безопасность может быть значительной.

Другие вопросы по тегам