Должно ли значение передаваться в качестве аргумента?Если нет, вы можете использовать что-то вроде этого:
set strToPass "< foo"
exec someProgram << $strToPass
Для имен файлов вы можете (почти всегда) вместо этого передавать полностью определенное имя.Полное имя можно получить с помощью file normalize
:
exec someProgram [file normalize "< foo"] ;# Odd filename!
Но если вам нужно , чтобы передать аргумент, где <
(или >
) - первый символзастрялКоманда exec
всегда использует такие аргументы, как перенаправления;в отличие от оболочки Unix, вы не можете просто использовать кавычки, чтобы обойти ее.
Но вы можете использовать вспомогательную программу.Таким образом, в Unix вы можете сделать это:
exec /bin/sh -c "exec someProgram \"$strToPass\""
(Подпрограмма просто заменяет собой то, что вы хотите запустить, передавая аргумент, который вам действительно нужен. Возможно, вам придется использовать string map
илиregsub
, чтобы поставить обратную косую черту перед проблемными метасимволами.)
В Windows вы должны написать пакетный файл и запустить его, который имеет много предостережений и неприятных побочных проблем, особенно для GUIприложения.