У меня есть программа на C, которая ожидает строку в качестве аргумента, я могу использовать ее следующим образом:
./myprog "hello"
Что я хочу сделать:
- Запустить программубез аргумента
- Получить PID этой программы
- Использовать этот PID в качестве основы для создания строки
- Передать эту строку в качестве аргумента работающей программы.
Я знаю, как получить пид.Я могу сделать это так:
./myprog &
PID=$!
У меня есть другая прога для вычисления строки, которую я хочу с этим pid:
./StringFromPid $PID
Что я не знаю, это: как использоватьрезультат этой последней строки в качестве ввода myProg (который уже запущен, но без его строкового аргумента, зная, что при запуске без аргумента он просто закроется ...)
Я пробовал:
./StringFromPid $PID | ./myprog
Но есть две проблемы с ним:
Он запускает другой экземпляр myprog, у которого есть другой pid, так что это не то, что я хочу.
Почему-то это даже не работает.Я имею в виду, что вывод ./StringFromPid $ PID не используется в качестве ввода для ./myprog.Он просто закрывается, как если бы не было аргументов.
Я не могу изменить myprog, но я могу изменить StringFromPid;Я даже могу поместить код StringFromPid в мой bash-скрипт, так как он совсем не большой.И я прочитал много туто о скрипте bash, но я все еще новичок в этом (не много практики)
Я нашел решение, но оно не оптимально (далеко не так):
#!/bin/bash
./myprog $(echo $(./StringFromPid $(let "a = $$";let "b = 5"; let "c = a + b"; echo $c)))
+5, потому что я только что обнаружил, что при запуске этого скрипта разница +5 между его PID и PID myprog.Не знаю почему, но это работает.
Однако я все еще открыт для лучших решений.На самом деле это работает на моем компьютере (кстати, я нахожусь на Ubuntu 16.04), но в конце он должен работать на сервере CTF, где у меня нет прав администратора