Потому что так пишется ZSH. ZSH по умолчанию дублирует файловый дескриптор на fd 10 :
.$ PS1='%% ' zsh -f
% lsof -p $$ | grep 10u
zsh 29192 jhqdoe 10u CHR 136,0 0t0 3 /dev/pts/0
%
И последующий код, связанный с fd -в вызовах Src/exec.c
movefd
/**/
static void
addfd(int forked, int *save, struct multio **mfds, int fd1, int fd2, int rflag,
char *varid)
{
int pipes[2];
if (varid) {
/* fd will be over 10, don't touch mfds */
fd1 = movefd(fd2);
if (fd1 == -1) {
zerr("cannot moved fd %d: %e", fd2, errno);
return;
что в Src/utils.c
дублирует -по --следующее -доступное -выше -10 -которое -уже --] взято -по -по умолчанию -поэтому --первое -вы -увидите --11 штук:
movefd(int fd)
{
if(fd != -1 && fd < 10) {
#ifdef F_DUPFD
int fe = fcntl(fd, F_DUPFD, 10);
#else
int fe = movefd(dup(fd));
#endif
Мой zsh
согласно strace
использует путь кода fcntl
, хотя из комментариев я подозреваю, что либо fcntl(...
, либо movefd(dup(...
приведут к новому fd, начинающемуся с 11; 10 недоступен, так как zsh по умолчанию содержит дубликат с этим номером.
Все, что делает {somelabel}
, — это получение наименьшего доступного файлового дескриптора больше 10; это может быть 11 или вместо этого может быть большее число в зависимости от того, что еще уже открыто в оболочке:
% exec {foo}>asdf
% echo $foo
11
% exec {quer}>asdf
% echo $quer
12
...
Убедитесь, что вы изменили загрузочную запись UEFI по умолчанию с Windows Boot Manager
на kali
либо навсегда в настройках загрузки BIOS. или вручную с помощью горячей клавиши BIOS, например F10 или F12(в зависимости от производителя )при запуске. С grub
вы сможете загрузить обе ОС.
Если вы не знаете, как делать то, что хотите, Kali, скорее всего, не тот дистрибутив Linux, который вам нужен.
Обычно Kali используется как образ, хранящийся на внешнем устройстве, который вы используете для загрузки своей машины, или как виртуальная машина, которую вы запускаете из своей основной ОС (вы можете использовать Virtualbox, который является бесплатным ).
Как бы то ни было, если вы все еще хотите продолжить этот путь, возможно, проблема заключается в том, что Grub не установлен на ваш загрузочный диск.
Не путайте разделы с дисками, Grub нужно устанавливать на диск (/dev/sda, например ), а не в раздел (/dev/sda1, /dev/sda2 и т. д.... ).
Одно дело — установить ОС (Kali в вашем случае ), а другое — установить Grub (, который -, как указано ранее -, должен находиться на загрузочном диске ).
Есть много руководств для изучения всего этого, но Kali будет слишком сложным для вас, если вы не знаете, как делать эти основные вещи.
Приложение:Как уже говорилось ранее, вы можете найти множество руководств/инструкций/руководств, введя простой поиск в свою поисковую систему google/duckduck/любую другую, поэтому я дам несколько основных рекомендаций.
Когда ваш компьютер запускается, именно BIOS вашего компьютера инициирует процесс загрузки, он выполняет базовую диагностику и прочее, а затем (в соответствии с конфигурацией, которую вы установили в своем BIOS ), выбираете, откуда загружаться.
Как только он находит устройство, с которого следует загрузиться, он передает управление фрагменту кода, содержащемуся в MBR/GPT, который является базовым кодом, который продолжается при инициализации. Это место, где должен быть установлен Grub. Если это не так, то ваш фрагмент кода Grub находится не в том месте.
Поскольку вы просили руководства, это Руководство по разделам Arch может представлять интерес, вы также можете проверить загрузочную статью Википедии .
Это результаты простого поиска, такого как «разбиение загрузочного диска Linux» или «процесс загрузки компьютера». Есть некоторые процессы, для объяснения которых требуются полные статьи, и их вряд ли можно описать здесь.