Почему замена процесса приводит к файлу, названному/dev/fd/63, который является каналом?

Все варианты BSD соответствовали бы Вашему счету. Лицензия BSD является намного более разрешающей, чем лицензия GNU.См. также.

Если это достаточно хорошо для Apple, это должно быть хорошо для Вас. OSX (и NeXTSTEP перед ним) являются очень симпатичным переносом ядра NetBSD. Они действительно используют в большой степени измененное Ядро Маха вместо стандартного Ядра BSD. В то время как у них было меньше проблем с GPL2, так как сдвиг к GPL3, Apple продвинула больше BSD (или подобный) лицензируемый код следовательно их одобрение Лязга по GCC как пример.

41
18.09.2014, 00:05
2 ответа

Если вы находитесь в режиме arch-chroot , необходимо запустить

grub-mkconfig -o /boot/grub/grub.cfg

, отличный от

 grub-mkconfig -o /mnt/boot/grub/grub.cfg

, поскольку : При первой установке arch linux вы монтируете файловую систему в /mnt и устанавливаете базовую систему извне. После завершения работы с базовыми пакетами можно arch-chroot внутри /mnt , и все команды должны выполняться как в обычной операционной системе.

Если это не решит вашу проблему, продолжите:


Проверьте, есть ли у какой-либо из ваших частей загрузочный флаг.

lsblk -f

Можно запустить следующее:

mkdir -p /boot/grub/locale
cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo

Во избежание появления сообщений об ошибке при загрузке с grub. Возможно, это не так, но вы можете попробовать.

Я не уверен, что может вызвать проблему, но, например, вы можете установить другой загрузчик, как syslinux , чтобы увидеть, была ли проблема вызвана grub или файловой системой.

Так как вы устанавливаете в ВМ, не стесняйтесь использовать ее в качестве изолированной среды и попробуйте все различные способы установки.

Я не знаю, как это работает в виртуальной машине, но я использовал некоторые другие конфигурации установки для grub, так как у меня есть жесткий диск UEFI.

-121--100715-

Альтернативы

Если вам действительно не нужны специальные возможности Vim, вам, вероятно, лучше использовать неинтерактивные инструменты , такие как sed , awk или Perl/Python/Ruby/ ваш любимый язык сценариев здесь .

Это означает, что Vim можно использовать неинтерактивно:

Silent Batch Метода

Для очень простой обработки текста (т.е. используя Vim как расширенный 'sed' или 'awk', может быть, просто извлечь выгоду из расширенных регулярных выражений в команде : substitute ) используйте Экс-методы .

REM Windows
call vim -N -u NONE -n -es -S "commands.ex" "filespec"

Примечание: фоновый пакетный режим (: help -s-ex ) нарушает работу консоли Windows, поэтому может потребоваться cls для очистки после запуска Vim.

# Unix
vim -T dumb --noplugin -n -es -S "commands.ex" "filespec"

Внимание: Vim зависнет в ожидании ввода, если файл «commands.ex» не существует; лучше заранее проверить его существование! Кроме того, Vim может считывать команды из stdin. Можно также заполнить новый буфер текстом, прочитанным из stdin, и прочитать команды из stderr, если используется аргумент - .

Полная автоматизация

Для более продвинутой обработки с использованием нескольких окон и реальной автоматизации Vim (где вы можете взаимодействовать с пользователем или оставить Vim запущенным, чтобы позволить пользователю взять на себя управление) используйте:

vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec"

Ниже приведена сводка использованных аргументов:

-T dumb           Avoids errors in case the terminal detection goes wrong.
-N -u NONE        Do not load vimrc and plugins, alternatively:
--noplugin        Do not load plugins.
-n                No swapfile.
-es               Ex mode + silent batch mode -s-ex
                Attention: Must be given in that order!
-S ...            Source script.
-c 'set nomore'   Suppress the more-prompt when the screen is filled
                with messages or output to avoid blocking.
-121--51475-

При выполнении < (some_command) оболочка выполняет команду в скобках и заменяет ее на дескриптор файла, подключенный к команде stdout. Таким образом, /dev/fd/63 является каналом, содержащим выходные данные вызова ls.

При выполнении команды < (ls -l) возникает ошибка Permission denied , так как вся линия заменена каналом, фактически пытаясь вызвать команду /dev/fd/63 , которая не является исполняемой.

Во втором примере cat < (ls -l) становится cat/dev/fd/63 . При чтении cat из файлов, заданных в качестве параметров, вы получаете содержимое. эхо с другой стороны, просто выводит его параметры «как есть».

Последний случай, < () , просто заменяется ничем, так как команды нет. Но это непротиворечиво между оболочками, в zsh все равно получается труба (хотя и пустая).

Сводка : < (команда) позволяет использовать выход команды, где обычно требуется файл.

Изменить: , как указывает Жиль , это не именованный, а анонимный канал. Основное отличие состоит в том, что он существует только до тех пор, пока выполняется процесс, в то время как именованный канал (созданный, например, с помощью mkfifo ) останется без присоединенных к нему процессов.

38
27.01.2020, 19:35

Вы неправильно поняли и команду ls , и перенаправление. ls перечисляет файлы и каталоги, указанные в командной строке, я не верю, что он принимает какой-либо ввод от stdin. Перенаправление > >> и < - это способы использования файла для ввода и сбора вывода.

-4
27.01.2020, 19:35

Теги

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