Как преобразовать очень маленький bash-скрипт в однострочную команду

Этот скрипт должен был решить вашу проблему. И В следующий раз попробуйте написать сценарий и спросить, есть ли у вас какие-либо проблемы, вместо того, чтобы просить полных решений.

#! /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
-1
01.03.2019, 05:03
2 ответа

Вы можете преобразовать свой сценарий в строку 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");
0
28.04.2021, 23:37

Я придумал два прохода:

первая часть (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

Я не уверен, что это хороший способ решить проблему.

-1
28.04.2021, 23:37

Теги

Похожие вопросы