AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 406861
Accepted
Alexander Mills
Alexander Mills
Asked: 2017-11-25 12:11:52 +0800 CST2017-11-25 12:11:52 +0800 CST 2017-11-25 12:11:52 +0800 CST

Altere o executável padrão para arquivo com shebang potencialmente ausente

  • 772

Eu tenho uma biblioteca - os usuários devem criar arquivos executáveis, potencialmente com um hashbang para informar execqual executável usar. Se eles omitirem o hashbang, acho que o padrão da maioria dos sistemas é /bin/sh, quero alterar esse padrão.

Portanto, alguns arquivos podem começar com:

#!/usr/bin/env foobar

outros arquivos podem começar com:

 #!/usr/bin/env perl

ou

 #!/usr/bin/env ruby

E, em alguns casos, o usuário omitirá completamente o hashbang. Nesse caso, ainda executarei o arquivo diretamente e desejo usar o foobarexecutável como padrão.

Em outras palavras , não sei qual será o hashbang com antecedência e quero que o padrão seja foobarem vez do padrão ser /bin/sh, se não houver hashbang presente.

Acho que a maneira de fazer o que estou fazendo é criar um executável que possa ser executado execprimeiro e, se isso falhar com uma mensagem de erro específica, execute o script indiretamente com o foobarexecutável.

Algo assim:

function run {
  stdio=$("$1" 2>&1)
  if [[ stdout/stderr matches a certain error message ]]; then
    foobar $1
  fi
}

Minha pergunta é - alguém sabe do que estou falando - e alguém sabe como posso usar como padrão um executável específico se nenhum hashbang estiver presente? Não que seja teoricamente menos conveniente verificar se existe um hashbang e, teoricamente, mais conveniente apenas executá-lo?

shell executable
  • 1 1 respostas
  • 478 Views

1 respostas

  • Voted
  1. Best Answer
    Stephen Kitt
    2017-11-25T13:48:50+08:002017-11-25T13:48:50+08:00

    Você pode implementar isso em duas etapas usando execve: peça à biblioteca C para solicitar ao kernel que execute o destino e, se isso falhar, tente novamente com foobar. Na verdade, é assim que os shells geralmente implementam a execução.

    Existem outras execfunções de família que executam scripts sem shebang com /bin/sh, mas execvenão.

    O que exatamente acontece quando executo um arquivo no meu shell? tem muito mais detalhes sobre esse assunto.

    • 3

relate perguntas

  • Como funciona este comando? mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc -l 1234 > /tmp/f

  • FreeBSD's sh: funções de lista

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • o que grep -v grep faz

  • Como salvar um caminho com ~ em uma variável?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve