Вызов SH со сценарием на stdin и прохождение аргументов командной строки

Попробуйте

sudo iwlist wlan0 scan | grep -i essid | awk -F'"" '{ print $2 }' >> essid.txt

Это передает вывод grep в awk, который использует разделитель " и печатает только поле с ESSID.

-3
21.11.2018, 18:29
2 ответа

Этот скрипт запросит пароль, расшифрует зашифрованный скрипт и запустит его с первым параметром командной строки, переданным основному скрипту:

#!/bin/bash

bash <(
    openssl enc -base64 -d -aes-256-cbc <<<'U2FsdGVkX1/m01Eg0CvZ7DiBi5Nf81+JrCWfKIDI9WtbkTZIVLhZskkKIioVfbSe'
) "$1"

Здесь не используется строка#!-расшифрованного скрипта, но предполагается, что он будет нормально работать подbash(и что он всегда успешно расшифровывается ). Сценарий расшифровки передается интерпретатору bashпосредством подстановки процесса при вызове opensslвместе с первым аргументом командной строки.

Чтобы записать расшифрованный скрипт на диск, запустите его, только если он был правильно расшифрован (с помощью предназначенного для него интерпретатора ), а затем удалите его:

#!/bin/bash

tmpscript=$(mktemp)
trap 'rm -f "$tmpscript"' EXIT

if ! openssl enc -base64 -d -aes-256-cbc <<<'U2FsdGVkX1/m01Eg0CvZ7DiBi5Nf81+JrCWfKIDI9WtbkTZIVLhZskkKIioVfbSe' >$tmpscript
then
    exit 1
fi

chmod +x "$tmpscript"
"$tmpscript" "$1"

Если вы хотите передать все параметры командной строки основного скрипта в расшифрованный скрипт, вы должны изменить "$1"в приведенных выше примерах на "$@". Двойные кавычки важны, поскольку они гарантируют, что отдельные аргументы передаются без разделения на пробелы и без подстановки имен файлов.

0
28.01.2020, 05:19

У вас было это в более ранней версии вопроса — передайте вариант -sнаsh:

echo "U2FsdGVkX1/m01Eg0CvZ7DiBi5Nf81+JrCWfKIDI9WtbkTZIVLhZskkKIioVfbSe" | openssl enc -base64 -d -aes-256-cbc | sh -s "$1"

Это говорит оболочке читать команды из стандартного ввода, принимая аргументы в своей командной строке (после-s)в качестве позиционных параметров для кода скрипта, поступающего со стандартного ввода. Конечно, переменные оболочки всегда должны быть заключены в кавычки. если у вас нет веской причины не делать этого, и это, вероятно, более полезно в долгосрочной перспективе передать"@"(все аргументы )в оболочку.

Таким образом, было бы также разумно цитировать все ссылки для переменных оболочки в test1.sh; например,

ls -l "$1"

Первое решение (, представленное выше ), кажется, работает хорошо для «нормальных» аргументов. Но в случае аргументов, начинающихся с -, лучше сделатьsh -s -- "$1"(или"$@"). Например,

#!/bin/sh
code="U2FsdGVkX1/m01Eg0CvZ7DiBi5Nf81+JrCWfKIDI9WtbkTZIVLhZskkKIioVfbSe"
echo "$code" | openssl enc -base64 -d -aes-256-cbc | sh -s -- "$@"

(где я поместил зашифрованный скрипт в переменную просто чтобы сделать командную строку короче, чтобы он поместился в столбце отображения суперпользователя ).

0
28.01.2020, 05:19

Теги

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