Используйте break;
для выхода из первого цикла:
if (s.Contains("mp4:production/CATCHUP/"))
{
RemoveEXELog();
Process p = new Process();
p.StartInfo.WorkingDirectory = "dump";
p.StartInfo.FileName = "test.exe";
p.StartInfo.Arguments = s;
p.Start();
break;
}
Если вы хотите также избежать второго цикла, вам может понадобиться использовать флаг и проверить защиту от цикла:
boolean breakFlag = false;
while (!breakFlag)
{
Thread.Sleep(5000);
if (!System.IO.File.Exists("Command.bat")) continue;
using (System.IO.StreamReader sr = System.IO.File.OpenText("Command.bat"))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
if (s.Contains("mp4:production/CATCHUP/"))
{
RemoveEXELog();
Process p = new Process();
p.StartInfo.WorkingDirectory = "dump";
p.StartInfo.FileName = "test.exe";
p.StartInfo.Arguments = s;
p.Start();
breakFlag = true;
break;
}
}
}
Или, если вы хотите полностью выйти из функции изнутри вложенного цикла, поставьте вместо break;
значение return;
.
Но на самом деле это не считается лучшей практикой. Вы должны найти способ добавить в логику while
необходимую логическую логику.
В докер-файлах все директивы требуют определенного кодового слова. Присвоение переменной окружения ничем не отличается от этого и требует кодового слова ENV
(см. здесь ).
Используя это, вы должны получить отрывок из вашего dockerfile
ENV AGENT_PATH=/agent/agent.jar
Это будет зависеть от шага Docker. Если вы используете шаг RUN
, обработка переменных не поддерживается:
В отличие от формы оболочки, форма exec не вызывает командную оболочку. Это означает, что обычная обработка оболочки не происходит. Например,
BLOCKQUOTE>RUN [ "echo", "$HOME" ]
не будет выполнять подстановку переменных в$HOME
. Если вы хотите обработать оболочку, то либо используйте форму оболочки, либо выполните оболочку напрямую, например:RUN [ "sh", "-c", "echo $HOME" ]
. При использовании формы exec и непосредственного запуска оболочки, как в случае с формой оболочки, именно оболочка выполняет расширение переменной среды, а не docker.