Как Вы упомянули в своем собственном ответе, пользовательская оболочка должна быть перечислена в /etc/shells
. Вы могли установить /sbin/nologin
как пользовательская оболочка, чтобы запретить ssh и позволить ftp, не изменяя pam конфигурацию:
usermod -s /sbin/nologin restricted_ftp_user
иногда для этого можно использовать /dev/tty...
ls /bin /usr/bin | sort | uniq | tee /dev/tty | grep out | wc
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
). / TMP
). Еще один вариант: Использовать замену процесса:
ls /bin /usr/bin | sort | uniq | tee abc.txt >(grep out)
Или в другой форме:
ls /bin /usr/bin | sort | uniq | tee abc.txt >(cat) | grep out
В случае, если это выполняется с терминала, вы можете
touch abc.txt
, затем tail -f abc.txt
ls /bin /usr/bin | sort | uniq | tee /dev/fd/2 | grep out | wc
На системе Linux вы можете использовать ссылки / dev / fd / [num]
, такие как именованные трубы во многих случаях. Это будет дублировать STDOUT в STDERR, который, как правило, является экраном вашего терминала , но не нужно.
Эта команда работала на меня.
ls /bin /usr/bin | sort | uniq | tee /dev/pts/0 | grep out
С помощью команды tty
вы можете проверить, что является вашим терминалом и заменить тройник, чтобы перенаправить вывод на этот терминал.
References
http://tldp.org/LDP/abs/html/io-redirection.html
cat stuff | 3>&1 tee 3 | xsel -i
Редактировать :К сожалению, приведенный выше ↑ неверен. Более ранний ответ
cat stuff | tee >(cat) | xsel -i
Однако — это хорошо.
Как это сделать (пример):
exec 3>&1; ( ls |( tee >&3 ) >/dev/null ); exec 3>&-
Который покажет результат ls и отправит его в нирвану.
Чтобы понять ключевую часть, 3>&1
, вы можете прочитать Перенаправление ввода/вывода и особенно. этот пример .
Вкратце:>somefile
является сокращением от 1>somefile
, что, в свою очередь, означает Назначить дескриптор файла somefile дескриптору файла 1 (и удалить прежнее значение этого дескриптора для области действия этого процесса.).
Таким образом, 3>&1
означает:Назначить дескриптор файла 1 (, который может, но не обязательно, быть tty )для (до сих пор неиспользуемого )дескриптора файла 3 . Мы эффективно используем &3
как временную переменную.