Этот скрипт должен был решить вашу проблему. И В следующий раз попробуйте написать сценарий и спросить, есть ли у вас какие-либо проблемы, вместо того, чтобы просить полных решений.
#! /bin/bash
function menu {
echo ""
echo "++++++++++++++++++++++++++++++++++++++++++++"
echo "+++++proxychain applications version1.0+++++"
echo "++++++++++++++++++++++++++++++++++++++++++++"
echo "[1] Add Proxychain"
echo "[2] Start Proxychains"
echo "[3] Exit"
echo "[4] Cat specified file"
read -p "Please select an option : " option
}
function input {
read -p "Input Type of Proxy : " type
read -p "Input Proxy IP Address : " ip_addr
read -p "Inport Proxy Port : " port
if [ ! -z "${type}" ]&&[ ! -z "${ip_addr}" ]&&[ ! -z "${port}" ]
then
echo -e "${type}\t${ip_addr}\t${port}" >>proxychains.conf
else
input
fi
}
function start {
echo "proxychains firefox"
}
function terminate {
if [ -z "$(pgrep firefox)" ]
then
echo -e "Goodbye\n"
sleep 1
end_script=1
exit 0
else
echo -e "Terminating firefox!\n"
pkill firefox
echo "Goodbye"
end_script=1
exit 0
fi
}
function catme {
read -p "Input the file path : " file_path
cat "${file_path}"
exit 0
}
end_script=0
while [ "${end_script}" != 1 ];do
menu
current_stage=${option}
case ${option} in
1)
input
;;
2)
start
;;
3)
terminate
exit 0
;;
4)
catme
;;
*)
echo "unknown usage!"
;;
esac
Вы можете преобразовать свой сценарий в строку C, а затем передать эту строку непосредственно в функцию popen(3)
.
Обратите внимание, что popen(3)
принимает сценарий, который будет передан в качестве аргументаsh -c
(и который может содержать любые допустимые команды оболочки ), а не только имя программы или командную строку.
Пример:
$ perl -e '
print qq{char *script =\n};
while(<>){
s/([\0-\x1f"\\\x7f-\xff])/sprintf "\\x%02x",ord$1/ge;
print qq{\t"$_"\n}
}
print qq{;\n}
' script.sh > script.h
$ cat script.h
char *script =
...
Затем в вашем C
файле:
#include script.h
...
FILE *fh = popen(script, "r");
Я придумал два прохода:
первая часть (url+addr)
awk -F/ '/0x017a/ {print $6}' /sys/bus/pci/devices/*/device
часть вторая
awk 'NR==1 { print substr($1,1,length($1)-8;}' /sys/bus/pci/devices/$addr/resource
Я не уверен, что это хороший способ решить проблему.