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 / 408283
Accepted
Arcticooling
Arcticooling
Asked: 2017-12-02 13:07:14 +0800 CST2017-12-02 13:07:14 +0800 CST 2017-12-02 13:07:14 +0800 CST

cat heredocument copiou tudo, exceto a chamada de função

  • 772

Executei o seguinte código em meu console Bash em um ambiente Ubuntu 16.04:

cat <<-'DWA' > /opt/dwa.sh
    DWA() {
        test='test'
        read domain
        find /var/www/html/ -exec cp /var/www/html/${domain} /var/www/html/${test} {} \;
        sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php
        sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php
        mysql -u root -p << MYSQL
            create user '${test}'@'localhost' identified by '${psw}';
            create database ${test};
            GRANT ALL PRIVILEGES ON ${test}.* TO ${test}@localhost;
        MYSQL
    }
    DWA
DWA

Tudo foi redirecionado como eu desejava, exceto o código na última linha (a última DWAque serve como chamada de função).

Por que tudo além da última DWAchamada de função foi copiado, mas apenas este fluxo não foi?

Talvez algum conflito com o DWAantes do último?

cat function
  • 1 1 respostas
  • 44 Views

1 respostas

  • Voted
  1. Best Answer
    jesse_b
    2017-12-02T13:30:18+08:002017-12-02T13:30:18+08:00

    O último DWAestá sendo removido porque você o está usando como delimitador. Os delimitadores informam ao seu shell que tudo entre essas strings correspondentes faz parte do meu documento aqui. Os delimitadores não fazem parte do documento e, portanto, são removidos quando o documento here é lido. A razão pela qual o DWAanterior permaneceu é porque o delimitador deve estar no início da linha. Eu normalmente vejo as pessoas usarem EOFou EOL, mas essa string pode ser o que você quiser, desde que seja única e não apareça em seu documento.

    Eu recomendo modificar para isso:

    cat <<-'EOF' > /opt/dwa.sh
        #!/bin/bash
        DWA() {
            test='test'
            read domain
            find /var/www/html/${domain} -exec cp /var/www/html/${domain} /var/www/html/${test} {} \;
    
            sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php
            sed -i 's/${domain}/${test}'/g /var/www/html/test/wp-config.php
    
            mysql -u root -p << MYSQL
                create user '${test}'@'localhost' identified by '${psw}';
                create database ${test};
                GRANT ALL PRIVILEGES ON ${test}.* TO ${test}@localhost;
            MYSQL
        }
        DWA
    EOF
    

    Se você realmente deseja que essas variáveis ​​se expandam antes de serem enviadas, dwa.shvocê deve remover as aspasEOF

    Acho esta página um recurso muito conciso para os documentos aqui: http://tldp.org/LDP/abs/html/here-docs.html

    • 2

relate perguntas

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

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