Чтобы быстро создать файл подготовки к удаленному резервному копированию всех моих домашних сценариев. Я использую следующее:
# Scripts backup
ls ~/*.sh | cpio -ov | 7z a -si ~/Documents/SCRIPT_BACKUP_30062017.cpio.7z
# Scripts restore
7z x -so ~/Documents/SCRIPT_BACKUP_30062017.cpio.7z | cpio -iv
Причина, по которой я не делаю резервную копию своего «домашнего» корня, заключается в том, что я специально синхронизирую и отправляю только некоторые каталоги. Обратите внимание, как cpio будет пропускать и проверять наличие более новых существующих файлов при восстановлении. Это мощно. Ваша работа не будет перезаписана.
бутон@
зш:
</dev/cdrom >myfile.iso
будет делать это только с операторами (, если не в sh
эмуляции ). Тем не менее, он по-прежнему выполняет команду $NULLCMD
(cat
по умолчанию ), чтобы выполнять фактическое чтение и запись.
Предлагаемый вами синтаксис
/dev/cdrom > myfile.iso
на самом деле может работать теперь в любой оболочке POSIX, потому что это не обязательно связано с оболочкой вообще.
Требуется, чтобы /dev/cdrom
был исполняемым и чтобы при выполнении он выводил содержимое компакт-диска. Это то, что может предоставить ваше ядро или драйвер устройства. В качестве альтернативы система может использоватьexecl
(и друзей )для использования /dev/cdrom
или его содержимого в качестве ключа для запуска другого исполняемого файла (, такого какcat
)с этим именем файла.
В любом случае, с соответствующим-exec
способным /dev/cdrom
вы абсолютно сможете запустить эту команду в любой оболочке. Я не знаю ни одной системы, которая ведет себя таким образом, вероятно, по очень веской причине, но теоретически это допустимо и возможно.
POSIX требует, чтобы первое слово команды рассматривалось как имя команды, и он определяет, как эта команда должна выполняться:
the shell shall execute the utility in a separate utility environment with actions equivalent to calling the execl() function defined in the System Interfaces volume of POSIX.1-2017 with the path and arg0 arguments set to the command name [...]
If the execl() function fails due to an error equivalent to the [ENOEXEC] error, the shell [...] shall write an error message and shall return an exit status of 126.
Таким образом, соответствующей оболочке не разрешается открывать и печатать файл для данных. Однако нет особой причины, по которой оболочка не могла бы поддерживать такое поведение как расширение, отличное от -POSIX. Я подозреваю, что форма, которую вы предлагаете, имеет серьезные недостатки, но версия zsh в основном хороша.