Скажите, что у меня есть команда cmd
это создает новое имя файла, данное как аргумент:
Например,
cmd -w /root/myfile
Как изменить это выражение для использования пользовательской команды, которые используют вывод файла непосредственно вместо того, чтобы писать файл.
Я не хочу записать файл и затем инициировать команду на нем, но поместить вывод cmd
непосредственно в новой пользовательской команде.
Например, вместо того, чтобы создать файл и затем работать
cat myfile | gpg -e > myfile.gpg
Я ищу выражение, которое непосредственно шифрует вывод.
Решение находится, вероятно, в использовании блочного устройства как
(cmd -w /dev/device) & (dd if=/dev/device | gpg -e > myfile.gpg)
Первым прибыл, первым обслужен не всегда работайте.
gpg
может принять вход от и произвести или к потокам или к файлам. Если можно использовать первую команду без флага-w и избежать необходимости создавать файл, пока команда производит к stdout, можно использовать:
cmd | gpg -e -o /path/to/myfile.gpg
, Который непосредственно запишет Ваши зашифрованные данные в файл, не создавая промежуточный файл.
запишите функцию удара, которая берет имя файла в качестве позиционного параметра $1
. Тем путем Ваши 3 команды уплотняют одной.
encrypt(){
cmd -w "$1"
cat "$1" | gpg -e > "$1".gpg
}
Место это в .bashrc, выполненный source ~/.bashrc
, и использование в качестве
encrypt myfile
Bash позволяет использовать конструкцию /dev/fd/
fd для обращения к файлу с дескриптором файла fd; стандартный вход /dev/fd/0
, стандартный вывод /dev/fd/1
, и т.д., и конечно можно открыть другие дескрипторы файлов.
Это означает что, если у Вас есть команда cmdname, который не может произвести к стандартному выводу, но принимает a -o
опция имени файла, можно заставить его записать в стандартный вывод с
cmdname -o /dev/fd/1