Я могу передать файлы между командами?

У Вас есть последняя версия tar удобной где-то в другом месте (другой компьютер)?
Если так, просто scp это к /usr/local/bin, принятие /usr/local/bin предшествует постоянному клиенту tar в Вашем пути команды. Затем можно обновить:

apt-get install tar
2
16.09.2016, 14:09
4 ответа

Много команд имеет опцию записать в STDOUT. Unrar, например, имеет p опция. Много команд затем имеет - опция, которая может использоваться в cojunction для чтения из STDIN. Таким образом, первый пример, который Вы дали, мог быть переписан как это:

unrar px file.rar | kplayer -

GPG уже работает с переданным по каналу входом по умолчанию:

unrar px file.rar | gpg -c

Проверьте справку команды и/или страницу человека/информации при отправке результатов в STDOUT поддерживается (много команд делают это по умолчанию).

2
27.01.2020, 21:57
  • 1
    Вы должны быть осторожны при использовании - для stdin и, возможно, должны были бы снабдить префиксом его - чтобы сообщить команде, что это - аргумент файла и не опция. –  Richm 15.10.2011, 20:17
  • 2
    Другая опция вместо того, чтобы использовать - состоит в том, чтобы использовать/dev/stdin в качестве файла или/dev/fd/0. Оба доступны на Linux, но я не делаю вещи, что это заставит kplayer работать, потому что этому, вероятно, нужен seekable файл и не поток/канал. –  Richm 15.10.2011, 20:18
  • 3
    @Richm Большинство программ распознает - как операнд, не опция. И POSIX и мандат GNU это - будьте операндом. –  Gilles 'SO- stop being evil' 16.10.2011, 02:00
  • 4
    Отметьте это p и x оба команды и unrar принимает только одну команду. Используя обоих как показано в ответе заканчивается синтаксическая ошибка. Как unrar пишут его сообщения об ошибках в STDOUT вместо STDIN (вероятно, наследие DOS), это будет отправлено в kplayer вместо того, чтобы появиться в терминале. –  manatwork 16.10.2011, 13:17
  • 5
    Это - ключ - программа должна поддерживать запись ее вывода к stdout [или, в повышении, к произвольному имени файла, для использования с >(process substitution)], вместо того, чтобы создать файл. (в принципе другая программа должна поддерживать взятие ее входа или от stdin или от произвольного имени файла, но это намного более распространено), –  Random832 17.10.2011, 17:42

Если команда просто требует имени файла, указать /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
2
27.01.2020, 21:57

Если Вы находитесь в оболочке, которая поддерживает замену процесса, которая могла бы помочь с программами, которые не могут взять данные из stdin.

Вы сделали бы kplayer <(unrar p file.rar)

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

1
27.01.2020, 21:57
  • 1
    Это эквивалентно использованию /dev/stdin: данные будут все еще прибывать из канала. <(…) конструкция только становится полезной, когда Вы хотите быть введенными от нескольких каналов (они не могут все быть stdin). –  Gilles 'SO- stop being evil' 16.10.2011, 02:02
  • 2
    @Gilles Это не то же; данные не прибывают из stdin. <(…) преобразовывается имя файла, и что имя файла передается программе как аргумент. Таким образом, если программа не читает из стандарта в, но действительно берет аргументы имени файла, это полезно. –  Shawn J. Goff 16.10.2011, 19:41
  • 3
    Но имя файла /dev/fd/NUMBER или что-то как он и файл - канал. –  Gilles 'SO- stop being evil' 16.10.2011, 21:01
  • 4
    Точно; это - канал, но не stdin, который является (я думаю), что искал автор. –  Shawn J. Goff 17.10.2011, 01:24

И спасибо все для входа, я предполагаю, что нет никакого простого способа получить то, что я хочу ;(

Следующая команда должна сделать и использовать/dev/shm, Таким образом, я должен создать изящный сценарий :)

cp file.gpg /dev/shm && gpg -c file.gpg && rm file.gpg && kplayer file && rm file
0
27.01.2020, 21:57

Теги

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