Linuxコマンドラインをファイルに追加するには?

Linuxコマンドラインをファイルに追加するには?

Vagrantfileを生成するbashスクリプトを作成しています。 Vagrantfileを生成するvagrant up ためにbashスクリプトを使用する理由は、同僚が実行する前に単一のスクリプトを使用して環境を設定できるようにするためです。

たとえば(setup-vagrant-host.sh

#!/bin/bash
.
.
.
some pre requisites steps
.
.
.
# Generate Vagrantfile
cat <<EOL > Vagrantfile
    Vagrant.configure("2") do |config|
    config.vm.define "vagrant-host"
    config.vm.provision "shell", inline: <<-SHELL
        sudo su
        apt update
        ipaddress=`hostname -I | awk '{print $2}'`
        echo "*** IP address is $ipaddress ***"
    SHELL
    end
EOL
vagrant up

上記のスクリプトを実行すると、hostname -I | awk '{print $2}'常にVagrantfileに追加されずに実行されます。これを正しく実行しているかどうかわかりません。より良い方法を提案してください...

英語が母国語ではないので、間違った文法を忘れてください。ありがとうございます。

ベストアンサー1

この文書の拡張は、拡張自体が参照されるか、文書自体が参照されない限り、シェルによって実行されます。

例のドキュメントでは、シェルが拡張しようとするコマンドの置換やその他のさまざまな変数を引用します。

cat <<EOL > Vagrantfile
    Vagrant.configure("2") do |config|
    config.vm.define "vagrant-host"
    config.vm.provision "shell", inline: <<-SHELL
        sudo su
        apt update
        ipaddress=\\\$(hostname -I | awk '{print \\\$2}')
        echo "*** IP address is \\\$ipaddress ***"
    SHELL
    end
EOL

$コマンドの置き換えだけでなく、コードや$2呼び出しawkでも$ipaddress引用する必要がありますecho。実際、この文字列\\\はここに含まれる文書の一部であるため、実際に二重引用符を使用する必要があります()SHELL。それぞれは「作成時」\\\$に置き換えられます。\$Vagrantfile

本当にそうでない場合考えるシェルを使用してこの文書の特定の変数を拡張すると、通常、この文書全体を参照しやすくなります。これは、初期文書区​​切り文字列を参照することによって行われる。

cat <<'EOL' > Vagrantfile
    Vagrant.configure("2") do |config|
    config.vm.define "vagrant-host"
    config.vm.provision "shell", inline: <<-'SHELL'
        sudo su
        apt update
        ipaddress=`hostname -I | awk '{print $2}'`
        echo "*** IP address is $ipaddress ***"
    SHELL
    end
EOL

ここでは、ここに含まれる文書と外部励起文書を参照することを選択します。

<<-このコードの使用方法と場所に応じて、最初の文書とここに含まれている文書の両方がタブにインデントされ、ここですべての文書(<<-'EOL'および<<-'START')で始まることを確認できます。これにより、ここに含まれている文書を正しく解析することができます(一度作成した場合は、最後に最初に来る必要がありますSHELL)。Vagrantfile

これについては私はコメントしませんでしたので、参考にしてくださいコンテンツここにある文書が達成しようとする目標の面で。たとえば、言葉にsudo suなるかどうかはわかりません。

おすすめ記事