airmon-ng с внутренним адаптером Wi-Fi

Вы можете поместить процесс (или несколько процессов) в фоновом режиме с помощью &, а затем в дальнейшем в вашем сценарии вы можете подождать, пока они все не закончатся, используя команду bash builtin wait. Вот это реклама от man bash:

   wait [-n] [n ...]
          Wait for each specified child process and return its termination
          status.  Each n may be a process ID or a job specification; if a
          job spec is given, all processes  in  that  job's  pipeline  are
          waited  for.  If n is not given, all currently active child pro‐
          cesses are waited for, and the return status is zero.  If the -n
          option  is  supplied,  wait  waits  for any job to terminate and
          returns its exit status.  If n specifies a non-existent  process
          or  job, the return status is 127.  Otherwise, the return status
          is the exit status of the last process or job waited for.

Проверка статуса возврата wait для конкретного задания может обеспечить "в случае успеха" проверку, что && делает, как и в этом тестовом сценарии:

#!/bin/bash
sleep 3 &
s3pid=$!
true &
trpid=$!
false &
fapid=$!

echo "Expecting success next, since true returns 0"
wait $trpid && echo "wait process true success" || echo "wait process true FAIL"
echo "Expecting FAIL next, since false returns 1"
wait $fapid && echo "wait process false success" || echo "wait process false FAIL"
echo "Expecting success next, since wait alone always returns 0"
wait && echo "wait for all success" || echo "wait for all FAIL"

Но только для одной команды, использование && будет таким же.... А в случае с запросом, если вы запускаете программу типа демона "никогда не останавливаться", она не будет завершена, и вам не нужно && или ждать

0
27.01.2015, 18:59
1 ответ

Скобки (которые по определению являются «кудрявыми») в этом контексте относятся к списку фрагментов текста, разделенных запятыми. Хотя он чаще всего используется для имен файлов, он расширяется перед обработкой расширений имен файлов. Поэтому нет возможности окончательного расширения, поскольку bash не может знать, действительно ли вы вводите имя файла или нет.

-121--150633-

Существует два способа интерпретации вопроса: вы хотите завершить, пока вы вводите имена перед закрытием } (фактически делать завершения файлов в другом каталоге); или необходимо развернуть и заменить (допустимые) имена после закрытия } . {} расширяет все опции, в отличие от globbing, который расширяет существующие имена файлов, хотя использует «», а не космос.

При использовании bash ожидаемым способом создания списка слов является {} :

cp ~/html/{foo,bar.txt,whatever}  ...

Существует два варианта: связывание привязки клавиши readline с функцией оболочки или программируемое завершение.

Подход readline дает вам свободную руку, чтобы полностью переписать текущую команду, но проблема в том, что она не маркирует текущую командную строку, поэтому у вас есть нетривиальная проблема синтаксического анализа.

Программируемое завершение маркирует командную строку, но можно только изменить/заменить текущее слово, что означает, что невозможно (легко) сохранить префикс path/{ во время редактирования.

Единственной связанной встроенной функцией bash является функция readline shell-expand-line для bash, которая предназначена для выполнения «всех расширений слова shell». По умолчанию она привязана к \M-\C-e (Esc \C-e ). Можно разумно ожидать, что это расширение будет все из семи типов расширения, указанных на странице man (bash-4.3):

 Расширение выполняется в командной строке после его разделения на
слова. Существует семь видов расширения: расширение раскосов,
расширение тильды, параметр и переменное расширение, командует substitu ‐
тион, арифметическое расширение, разделение слов и расширение пути.

Вы можете поэкспериментировать с помощью ввода (без нажатия кнопки Return)

echo {1..2} ~root $0 $LANG `echo foo` $((1+2) "a b" /etc/p[aeiou]*

, а затем Meta Ctrl E (или ESC + Ctrl E , если вы используете мета-дефибрированную клавиатуру).

Ни первое, ни последнее (скобка и путь) расширения не работают для меня, поэтому документация и реализация не вполне соответствуют IMHO.

Ниже приведено не полное, а рабочее решение с использованием вкладки для расширения. Необходимо убедиться, что используется правильный синтаксис для раскоса, хотя, в частности, с запятой, чтобы разделить элементы, а не космос.

function _expand() {
   [[ -z "${READLINE_LINE}" ]] && return
   eval local aa=( ${READLINE_LINE} )       # not-quoted, eval needed
   [[ ${#aa} -eq 0 ]] && return             # parse problem
   printf -v READLINE_LINE "%s " "${aa[@]}"
   READLINE_POINT=${#READLINE_LINE}         # eol, predictable at least
}

bind -x '"\C-_":_expand'

При этом Ctrl _ связывается с функцией bash, которая использует eval для заполнения массива, вызывая все обычные расширения (как описано выше, и не включая историю),а затем перестраивает командную строку.

Начните ввод, нажмите Ctrl _ , когда вы хотите что-то развернуть, и Вернитесь , как обычно, когда будете готовы.

Это более мощное, чем tab, но менее точное, поскольку оно расширяет всю входную строку. Есть несколько случаев, когда это не расширится, как надеялись, в частности, когда различные метасимволы оболочки путают простую логику оценки .

Предложение Гилле zsh стоит посмотреть, а не сверхинженерное решение.

-121--150632-

Насколько я знаю, вы можете использовать USB wifi устройства только для aircrack-ng, если вы используете его в виртуальной машине. Если вы хотите использовать внутреннюю карту Wi-Fi, попробуйте ее с живой версией backtrack

Приветствия

1
28.01.2020, 02:51

Теги

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