1

正確な内容を持つ複数行のファイルを Make で作成したい:

#!/bin/bash

if [ "$JAVA_HOME" = "" ]; then echo "Please set JAVA_HOME"; exit 1; fi
export CONFIG_VARS=$( cat <<EOF
 -Dmapred.job.tracker=$JT
EOF
)

${HADOOP_HOME}/bin/hadoop $1 $HADOOP_CONFIG_VARS ${*:2} 2>&1 | grep -v SLF4J

この正確なコンテンツを含むファイルをどこかに出力するようにmakeに指示するにはどうすればよいですか?

私はこれを試しました:

define SCRIPT_CONTENT
#!/bin/bash

if [ "$JAVA_HOME" = "" ]; then echo "Please set JAVA_HOME"; exit 1; fi
export CONFIG_VARS=$( cat <<EOF
 -Dmapred.job.tracker=$JT
EOF
)

${HADOOP_HOME}/bin/hadoop $1 $HADOOP_CONFIG_VARS ${*:2} 2>&1 | grep -v SLF4J
endef
export SCRIPT_CONTENT
bin/script:
    @echo "$$SCRIPT_CONTENT" > bin/script

この特定のソリューションは、1) $-es の後に $ と最初の文字をワイプし、2) 必要な特定のターゲットの外で定義が行われる必要があるため、醜いです:(

私もこれを試しました:

bin/script:
    @echo '
    #!/bin/bash

    if [ "$JAVA_HOME" = "" ]; then echo "Please set JAVA_HOME"; exit 1; fi
    export CONFIG_VARS=$( cat <<EOF
     -Dmapred.job.tracker=$JT
    EOF
    )

    ${HADOOP_HOME}/bin/hadoop $1 $HADOOP_CONFIG_VARS ${*:2} 2>&1 | grep -v SLF4J
    ' > bin/script

これは、メイク中にエラーを返し、メイクの外で動作します...

どんな提案でも大歓迎です!

4

3 に答える 3