У Вас есть последняя версия tar удобной где-то в другом месте (другой компьютер)?
Если так, просто scp
это к /usr/local/bin
, принятие /usr/local/bin
предшествует постоянному клиенту tar
в Вашем пути команды. Затем можно обновить:
apt-get install tar
Много команд имеет опцию записать в STDOUT
. Unrar, например, имеет p
опция. Много команд затем имеет -
опция, которая может использоваться в cojunction для чтения из STDIN
. Таким образом, первый пример, который Вы дали, мог быть переписан как это:
unrar px file.rar | kplayer -
GPG уже работает с переданным по каналу входом по умолчанию:
unrar px file.rar | gpg -c
Проверьте справку команды и/или страницу человека/информации при отправке результатов в STDOUT
поддерживается (много команд делают это по умолчанию).
Если команда просто требует имени файла, указать /dev/stdin
или /dev/fd/0
. Это специальные файлы; открытие их на самом деле копирует стандартный вход. Некоторые команды принимают -
как псевдоним для стандартного входа, также.
unrar p foo.rar somefile | somecommand -
unrar p foo.rar somefile | somecommand /dev/stdin
Иногда программа налагает ограничения на имя файла, обычно требуя определенного расширения. Вы смогли дурачить его с символьной ссылкой.
ln -s /dev/stdin myfile.ext
unrar p foo.rar somefile | somecommand myfile.ext
Это будет не всегда работать, потому что некоторые программы не могут справиться с переданным по каналу входом: они требуют seekable файлов, т.е. файла, куда они могут пойти назад и вперед по желанию. В этом случае необходимо сделать временный файл.
В некоторых случаях можно принять меры, чтобы данные появились как регулярный файл, а не как вывод команды. FUSE, в частности, может заставить все виды вещей появиться как регулярные файлы. Например, с AVFS, участники архива появляются как файлы.
mountavfs
cd "~/.avfs$PWD/foo.rar\#"
somecommand somefile
Если Вы находитесь в оболочке, которая поддерживает замену процесса, которая могла бы помочь с программами, которые не могут взять данные из stdin.
Вы сделали бы kplayer <(unrar p file.rar)
Если Вы являетесь довольно отчаянными, можно использовать электронный диск и на самом деле создать файлы, но они не будут на диске.
/dev/stdin
: данные будут все еще прибывать из канала. <(…)
конструкция только становится полезной, когда Вы хотите быть введенными от нескольких каналов (они не могут все быть stdin).
– Gilles 'SO- stop being evil'
16.10.2011, 02:02
<(…)
преобразовывается имя файла, и что имя файла передается программе как аргумент. Таким образом, если программа не читает из стандарта в, но действительно берет аргументы имени файла, это полезно.
– Shawn J. Goff
16.10.2011, 19:41
/dev/fd/NUMBER
или что-то как он и файл - канал.
– Gilles 'SO- stop being evil'
16.10.2011, 21:01
И спасибо все для входа, я предполагаю, что нет никакого простого способа получить то, что я хочу ;(
Следующая команда должна сделать и использовать/dev/shm, Таким образом, я должен создать изящный сценарий :)
cp file.gpg /dev/shm && gpg -c file.gpg && rm file.gpg && kplayer file && rm file
-
как операнд, не опция. И POSIX и мандат GNU это-
будьте операндом. – Gilles 'SO- stop being evil' 16.10.2011, 02:00p
иx
оба команды иunrar
принимает только одну команду. Используя обоих как показано в ответе заканчивается синтаксическая ошибка. Какunrar
пишут его сообщения об ошибках в STDOUT вместо STDIN (вероятно, наследие DOS), это будет отправлено вkplayer
вместо того, чтобы появиться в терминале. – manatwork 16.10.2011, 13:17>(process substitution)
], вместо того, чтобы создать файл. (в принципе другая программа должна поддерживать взятие ее входа или от stdin или от произвольного имени файла, но это намного более распространено), – Random832 17.10.2011, 17:42