Как запустить строку с команды от вывода другой команды

Любая хорошая VPN должна смочь передать произвольные пакеты через прокси HTTPS. Например, OpenVPN может сделать это. Конечно, как со всей VPN, Вам нужна точка выхода: машина, которой Вы управляете с другой стороны, где Ваши пакеты могут быть развернуты и восстановить свой полный потенциал.

Другие методы включают туннелирующий трафик IP по DNS, потому что некоторые точки доступа с вынужденными правилами (как обязательный HTTP (S) прокси) позволяют запросам DNS передать (не, все точки доступа прокладывают себе путь, хотя). В последний раз я слышал, IP по DNS часто работает, но производительность является, скажем, субоптимальной.

2
20.01.2014, 21:49
4 ответа

Правильный поступок здесь должен настроить удар для запроса установку, как объяснено в ответе SamK. Я отвечу строго с точки зрения использования оболочки.

Во-первых, текст, который Вы пытаетесь захватить, находится на стандартной погрешности команды, но канал перенаправляет стандартный вывод, таким образом, необходимо перенаправить stderr к stdout.

htop 2>&1 | tail -1

Для использования вывода команды как часть командной строки используйте замену команды.

$(htop 2>&1 | tail -1)

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

Для оценки строки как команды оболочки использовать eval. Для обработки результата команды как строка, а не список подстановочных шаблонов поместите его в двойные кавычки.

eval "$(htop 2>&1 | tail -1)"

Конечно, прежде, чем оценить команду оболочки как этот, удостоверьтесь, что это действительно, что Вы хотите выполнить.

4
27.01.2020, 21:50

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

В Вашем случае я нашел ответ здесь: https://askubuntu.com/a/309179 от Gerhard Burger.

Я заключаю в кавычки:


Пакет, который ответственен за это поведение, является command-not-foundInstall command-not-found пакетом, и это уже включает желаемое поведение, хотя это отключено по умолчанию. Можно включить его путем добавления следующей строки к Вашему ~/.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

Теперь поведение изменяется на

The program 'x' is currently not installed. You can install it by typing:
sudo apt-get install x
Do you want to install it? (N/y)
4
27.01.2020, 21:50

При использовании GNU screen, добавьте это к Вам ~/.screenrc:

bind R eval copy "stuff kY" "paste ."

Затем можно нажать Ctrl-AR для вставки содержания строки выше курсора.

1
27.01.2020, 21:50

С ударом или большим количеством оболочек эта OS, очень легкая сделать, если Вы знаете выходной формат. Существует несколько способов закончиться помещенные как команды, но те, которые мне нравится лучшее, полагаются на переменное расширение.

#!/bin/bash

CMD ='some/exeutible | вывод синтаксического анализа с чем-то | и возможно что-то еще'
'$CMD'

'Говорит, что basicly "выполняют то, что между' и 'и выполнит сохраненные команды.

В Вашем примере Вы должны проанализировать stderr и произвести, затем снабжают проанализированный вывод между 'и'. Я не скажу Вам, как проанализировать вывод, но смотреть на Это, он должен помочь с расширением.

0
27.01.2020, 21:50

Теги

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