Передайте вывод по каналу команды к команде комнаты

Этот тип туннеля не изменяет Вашу информацию о IP-адресе. Все, что это делает, говорят Вашему компьютеру открывать порт 9999, и вперед соединения с тем портом к удаленной машине (tim@server) через Ваше соединение SSH. Самый легкий способ протестировать это, на которое возросло соединение, к telnet к порту, вперед был создан на (в Вашем примере 9999):

$ telnet localhost 9999
Попытка сервера...
Подключенный к серверу.
Символ ESC является '^]'.

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

Относительно Вашего второго вопроса, для Вашего браузера, Ваш браузер не будет использовать туннель, если Вы не скажете его. В параметрах сети браузеров можно настроить настройки прокси и указать localhost:9999 как прокси socks5, и затем веб-подключения должны использовать ssh, туннелируют и, кажется, прибывают из IP-адреса сервера.

5
17.11.2012, 15:53
5 ответов

Для ответа на более общий вопрос это - задание xargs взять список слов на стандартном входе и преобразовать его в список аргументов команде.

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

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

mpc | head -n 1 | sed 's/./\\&/g' | xargs rm --

Обратите внимание что некоторые xargs реализации имеют довольно низкий предел на максимальную длину строки, которую они ожидают на stdin, таким образом, можно будет захотеть только выйти из необходимых символов с теми.

С GNU xargs по крайней мере, Вы не должны делать этого, можно сделать:

mpc | head -n 1 | xargs -rd '\n' rm --

(также использование GNU определенная-r опция постараться не выполнять любую команду, если вход пуст).

9
27.01.2020, 20:33
  • 1
    Объяснить sed: это преобразовывает "вход как это" в "\i\n\p\u\t\\l\i\k\e\\t\h\i\s". Это не обработает новые строки, но правильно выйдет из пробелов и кавычек. Обратите внимание также, что это не решит проблему тегов @ChrisDown, описывает в его ответе. –  dubiousjim 17.11.2012, 18:41
  • 2
    Этот ответ был бы лучше для редактирования, которое объяснило, почему это необходимо и что он выполняет. –  Caleb 17.11.2012, 19:58

Можно сделать это с rm -i "/path/to/music/library/$(mpc -f %file% | head -n 1)". Однако предупредите, что это повредится, если имя файла будет содержать новую строку. Как вывод mpc -f %file% относительно Вашего музыкального пути к библиотеке, необходимо предварительно ожидать его к выводу.

4
27.01.2020, 20:33
  • 1
    Обратите внимание, что можно работать вокруг второго использования задач mpc -f %file%. Кроме того, пути mpc выводы относительно музыкального каталога, который Вы настроили его для поиска, таким образом, необходимо включить тот путь. Например, rm -i "/var/lib/mpd/music/$(mpc -f %file% | head -n 1)" –  Michael Mrozek♦ 17.11.2012, 18:43
  • 2
    @MichaelMrozek - Большая информация! Добавит это к моему сообщению. –  Chris Down 17.11.2012, 18:55

Если Вы не можете произвести ЗАВЕРШЕННЫЕ ПУСТЫМ УКАЗАТЕЛЕМ имена файлов (как, например. find -print0) можно попытаться заключить имена файлов в кавычки путем передачи по каналу его через sed 's/^/"/;s/$/"/', который добавляет кавычки вначале и конец строки. Отметьте однако, это в этом случае Вы должны иметь:

  • один файл на строку
  • никакие двойные кавычки в именах файлов

Преимущество, что можно в значительной степени произвольно преобразовать вывод (например, когда Вы решаете не переименовать, а не удалить или когда необходимо лишить части вывода).

0
27.01.2020, 20:33

Если безопасно предположить, что у Вас нет файлов с двойными кавычками или новыми строками, можно сделать:

mpc | head -n 1 | sed  's/^/"/g ; s/$/"/g' | xargs rm --

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

0
27.01.2020, 20:33

Лично я считаю, что xargs - это весело и все такое, но я предпочитаю циклы для такого рода вещей. Почему? Что ж, это дает вам больше гибкости ... а также дает вам довольно простой способ обрабатывать пробелы:

mpc | head -n 1 | while read filename
do
  ls -al "$filename"  # Look at the file you're deleting
  rm -i "$filename"   # Ask if you want it deleted (or not)
done

Когда вы используете такой цикл while, ваши данные перекачиваются в любое имя переменной, которое появляется после "read"; чтобы ссылаться на переменную, вам понадобится ведущий знак доллара. Кавычки нужны для изящной обработки пробелов, поэтому они не похожи на разделители. Подобные петли, хотя и менее элегантны, чем простой однострочный, предлагают вам большую гибкость и безумно удобны в долгосрочной перспективе.

1
27.01.2020, 20:33

Теги

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