использование мишени для вывода промежуточного звена заканчивается к stdout вместо файлов

Как Вы упомянули в своем собственном ответе, пользовательская оболочка должна быть перечислена в /etc/shells. Вы могли установить /sbin/nologin как пользовательская оболочка, чтобы запретить ssh и позволить ftp, не изменяя pam конфигурацию:

usermod -s /sbin/nologin restricted_ftp_user
9
12.01.2015, 19:41
8 ответов

иногда для этого можно использовать /dev/tty...

ls /bin /usr/bin | sort | uniq | tee /dev/tty | grep out | wc
9
27.01.2020, 20:06
mkfifo myfifo
cat myfifo& ls /bin /usr/bin | sort | uniq | tee myfifo | grep out

MKFIFO создает специальный файл FIFO (First In, First Out), A.K.a. названная труба. Начните асинхронное CAT , чтобы прочитать из FIFO, а затем запустить свой трубопровод, Tee промежуточный результат в ФИФО.

Это даст сообщение [1] + DONE CAT MYFIFO в конце. Вы можете подавить, что с этим волшебным трюком:

(cat myfifo&); ls /bin /usr/bin | sort | uniq | tee myfifo | grep out

для долгосрочного, надежного решения, вы можете создать постоянный FIFO (например, $ HOME / MYFIFO ), а не создание нового каждый раз. Но это потерпит неудачу, если вы можете одновременно запустить несколько экземпляров этого. Альтернативно,

  • генерирует уникальное имя (например, с MKTEMP ).
  • Создайте FIFO в каталоге, который гарантированно будет пишечным (например, / TMP ).
  • Удалите FIFO в конце команды.
0
27.01.2020, 20:06

Еще один вариант: Использовать замену процесса:

ls /bin /usr/bin | sort | uniq | tee abc.txt >(grep out)

Или в другой форме:

ls /bin /usr/bin | sort | uniq | tee abc.txt >(cat) | grep out
2
27.01.2020, 20:06

В случае, если это выполняется с терминала, вы можете

  • запустить терминальный мультиплексор, такой как tmux или screen
  • разделить ваш терминал - в tmux Ctrl B"
  • в первом окне touch abc.txt, затем tail -f abc.txt
  • переключиться во второе окно и выполнить вашу команду. Вы увидите файл, созданный в результате обновления tee.
0
27.01.2020, 20:06
ls /bin /usr/bin | sort | uniq | tee /dev/fd/2 | grep out | wc

На системе Linux вы можете использовать ссылки / dev / fd / [num] , такие как именованные трубы во многих случаях. Это будет дублировать STDOUT в STDERR, который, как правило, является экраном вашего терминала , но не нужно.

1
27.01.2020, 20:06

Эта команда работала на меня.

ls /bin /usr/bin | sort | uniq | tee /dev/pts/0 | grep out

С помощью команды tty вы можете проверить, что является вашим терминалом и заменить тройник, чтобы перенаправить вывод на этот терминал.

References

https://stackoverflow.com/a/18025293/1742825

1
27.01.2020, 20:06

http://tldp.org/LDP/abs/html/io-redirection.html

cat stuff | 3>&1 tee 3 | xsel -i

Редактировать :К сожалению, приведенный выше ↑ неверен. Более ранний ответ

cat stuff  | tee >(cat) | xsel -i
Однако

— это хорошо.

-1
27.01.2020, 20:06

Как это сделать (пример):

exec 3>&1; ( ls |( tee >&3 ) >/dev/null ); exec 3>&-

Который покажет результат ls и отправит его в нирвану.

Чтобы понять ключевую часть, 3>&1, вы можете прочитать Перенаправление ввода/вывода и особенно. этот пример .

Вкратце:>somefileявляется сокращением от 1>somefile, что, в свою очередь, означает Назначить дескриптор файла somefile дескриптору файла 1 (и удалить прежнее значение этого дескриптора для области действия этого процесса.).

Таким образом, 3>&1означает:Назначить дескриптор файла 1 (, который может, но не обязательно, быть tty )для (до сих пор неиспользуемого )дескриптора файла 3 . Мы эффективно используем &3как временную переменную.

1
21.03.2021, 22:31

Теги

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