Onde está a documentação para [x $ feature_… = xy] no grub.cfg?

4

Não consigo encontrar nenhuma referência do recurso x $ ... usando o Google, pois ele mostrará exemplos de grub.cfg.

No grub.cfg gerado automaticamente, há muito

if [ x$feature_platform_search_hint = xy ] ...

if [ x$feature_default_font_path = xy]...

if [ x$feature_all_video_module = xy ]...

Meu entendimento é que está verificando se o recurso está presente. Onde posso encontrar todos os recursos disponíveis com a descrição.

Eu assumo que "xy" significa algo como verdadeiro ou disponível. Quais outros valores você pode ter?

Edit: Eu só preciso saber as variáveis disponíveis no grub.cfg. De preferência, uma documentação.

    
por Rami 05.10.2016 / 06:54

2 respostas

2

Estritamente falando, expressão sábia, if [ x$feature_platform_search_hint = xy ] não tem nada a ver com grub , é uma expressão de shell, a ser interpretada pelo shell. grub está usando em um de seus scripts de ajuda, é isso.

if [ x$feature_platform_search_hint = xy ] é basicamente testando se a variável feature_platform_search_hint é expandida para y .

Como?

O [ é um sinônimo para o comando test (pode ser um shell embutido ou um comando externo), usado para avaliar expressões.

Em if [ x$feature_platform_search_hint = xy ] :

  • [ está testando se as strings x$feature_platform_search_hint e xy são iguais

  • aqui x é um espaço reservado, string fictícia, existe em ambos os lados

  • a variável $feature_platform_search_hint é expandida primeiro, o valor é adicionado à string já existente x e, em seguida, a sequência à esquerda é comparada à sequência à direita de =

  • Com efeito, é necessário verificar se a variável feature_platform_search_hint tem valor y

  • Aqui x é usado para que, se a variável feature_platform_search_hint não estiver definida ou nula, o [ sairá com um erro, pois = requer argumento em ambos os lados e sem feature_platform_search_hint . tornar-se:

    if [ = y ]
    

    usando x obtém o uso sintaticamente correto nesse caso:

    if [ x = xy ]
    

Observe que, em vez disso, deve-se usar o teste -z (que testa se a cadeia é de comprimento zero) ou -n teste (teste de comprimento diferente de zero), o que for mais adequado:

if [ -n "$feature_platform_search_hint" ]
if [ -z "$feature_platform_search_hint" ] 

Deve-se também citar variáveis (embora estritamente desnecessário neste caso, já que presumivelmente o autor pretendia definir / sobrescrever a variável dentro do script):

if [ x"$feature_platform_search_hint" = xy ]
    
por heemayl 05.10.2016 / 07:22
0

feature_platform_search_hint (e outros) e a sintaxe semelhante a shell são um recurso do módulo normal em grub . A sintaxe está um pouco documentada no manual do GRUB - embora eu não tenha encontrado documentação para [] A linguagem de script é "obviamente" modelada após o bash, pois ela reserva palavras usadas no bash, mesmo que ainda não implementadas (como [[ ) e implementa bashisms como function .

As variáveis predefinidas, como feature_platform_search_hint , são codificadas permanentemente no módulo normal no momento da criação e são essencialmente não documentadas, exceto pelo estudo do código-fonte. Nas versões atuais de grub , essas variáveis são definidas como y em todos os momentos, portanto, essas variáveis parecem indicar suporte para recursos específicos de uma determinada versão do grub, e testá-las pode ser feito para gravar grub.cfg arquivos que trabalhe com várias versões do grub.

Por exemplo, feature_platform_search_hint=y parece indicar que o comando de pesquisa suporta --hint-bios , --hint-efi e assim por diante, enquanto a ausência dessa variável pode indicar uma versão de grub que não suporta esses switches , portanto, você não deve tentar executar uma instrução search usando-os para evitar erros de sintaxe.

Existe muita conjectura e "pode" na minha resposta, pois tudo isso parece ser essencialmente não documentado.

    
por Marc Lehmann 16.07.2017 / 01:04

Tags