sort "$f1"
не работает для значений $f1
, которые начинаются с -
или здесь, для случая sort
, некоторые из которых начинаются с +
(, могут иметь серьезные последствия для файла с именем -o/etc/passwd
, например ).
sort -- "$f1"
(где --
сигнализирует об окончании опций )устраняет большинство этих проблем, но по-прежнему не работает для файла с именем -
(, который sort
вместо этого интерпретирует значение своего стандартного ввода ).
sort < "$f1"
Нет таких проблем.
Здесь оболочка открывает файл. Это также означает, что если файл не может быть открыт, вы также получите потенциально более полезное сообщение об ошибке (, например, большинство оболочек укажут номер строки в сценарии ), а сообщение об ошибке будет последовательным, если вы используете перенаправления, где это возможно, для открытия файлов.
И в
sort < "$f1" > out
(в отличие от sort -- "$f1" > out
), если "$f1"
не может быть открыт, out
не будет создан/усечен и sort
даже не будет запущен.
Чтобы устранить некоторую возможную путаницу (после комментариев ниже ), это не мешает команде mmap()
открывать файл или lseek()
проникать внутрь него (, а не то, что sort
делает либо )при условии, что сам файл доступен для поиска. Единственное отличие состоит в том, что файл открывается раньше и с файловым дескриптором 0 оболочкой, а не позже командой, возможно, с другим файловым дескриптором. Команда по-прежнему может искать/ммапить этот fd 0 по своему усмотрению. Это не следует путать с cat file | cmd
, где на этот раз cmd
stdin является конвейером, который нельзя преобразовать/поискать.
Просматривая содержимое /boot, вы можете увидеть, какой загрузчик используется, а затем настроить его для загрузки нужного вам ядра.
Используемое ядро зависит исключительно от вашего загрузчика. Выяснил что это такое и настроил на загрузку нужной версии ядра.