DC и стандартный ввод или heredoc со строковой командой?

Я полагаю, что это функция, предоставляемая вашим провайдером облачного хостинга Linode. У них есть документ под названием Как изменить ядро ​​Linode , который содержит следующую информацию:

Your Linode is capable of running one of three kinds of kernels:

  • An upstream kernel that is maintained and provided by your Linux distribution’s authors (this is also referred to as the
    distribution-supplied kernel).

  • The Linode kernel. Linode maintains an up-to-date kernel: Linode’s engineering team monitors for new versions of the Linux kernel and then packages them for users shortly after they are available. These kernels are not installed on your filesystem–instead, the Linode Manager supplies them at boot time to your system.

  • A kernel that you compile from source.

Это объясняет, почему установленный пакет ядра отличается от работающего ядра, как сообщает uname.

В том же документе также содержится следующее о выборе ядра:

Most distributions that can be deployed from the Linode Manager boot the upstream kernel by default. CentOS 6, OpenSUSE Leap 42.3, Slackware, and Ubuntu 14.04, and older distributions are exceptions to this rule, and they boot the Linode kernel by default.

Для вашей собственной системывы можете убедиться в этом, следуя инструкциям в документе, на который я ссылаюсь. Вкратце, конфигурация должна быть видна в меню «Настройки» > «Дополнительные конфигурации» > [Текущая конфигурация] > «Правка» > «Параметры загрузки» > «Ядро».

4
06.04.2021, 16:46
1 ответ

?получает ввод из стандартного ввода, который является здесь документом. Вам нужно передать сценарий на dc, используя другой файловый дескриптор. В системах с /dev/fd/nэто может быть с:

dc /dev/fd/3 3<< 'EOF'
[enter a number : ]
n
?
p
EOF

Или вы можете использовать замену процесса в стиле ksh -(, которая обычно использует /dev/fd/nпод):

dc <(cat << 'EOF'
[enter a number : ]
n
?
p
EOF
)

Или покончить с здесь -документом и вызовом (вообще )внешней catутилиты:

dc <(printf %s \
'[enter a number : ]
n
?
p
'
)

Некоторые реализации dc, такие как GNU dc, позволяют передавать содержимое скрипта dcв качестве аргумента с -e, поэтому вы можете использовать подстановку команд:

dc -e "$(cat << 'EOF'
[enter a number : ]
n
?
p
EOF
)"

Или напрямую:

dc -e '[enter a number : ]
n
?
p'
6
28.04.2021, 22:53

Теги

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