私のファイルには次のコードブロックがあります。
175 MY_IP=`ifconfig eno1 | grep netmask | tr -s ' ' | cut -d " " -f 3`
176 echo "" > /home/hadoop/.ssh/config
177 cat > /home/hadoop/.ssh/config <<EOF
178 Host `echo $MY_IP | sed 's/.[0-9][0-9]*$//g'`.* 0.0.0.0 master worker*
179 StrictHostKeyChecking no
180 UserKnownHostsFile=/dev/null
181 EOF
ファイルに178〜181行を書きたいのですが、次のエラー出力が表示されます。
/script.sh: line 178: unexpected EOF while looking for matching `''
/script.sh: line 184: syntax error: unexpected end of file
構文を確認せずにそのテキストをコピーしないのはなぜですか?
更新:現在私のコードとエラーメッセージは次のとおりです。
175 MY_IP=`ifconfig eno1 | grep netmask | tr -s ' ' | cut -d " " -f 3`
176 echo "" > /home/hadoop/.ssh/config
177 cat > /home/hadoop/.ssh/config <<EOF
178 Host `echo $MY_IP | sed "s/.[0-9][0-9]*$//g"`.* 0.0.0.0 master worker*
179 StrictHostKeyChecking no
180 UserKnownHostsFile=/dev/null
181 EOF
182
183 chown -R hadoop:hadoop /home/hadoop
/script.sh: 行 175: 一致する "" の検索中に予期しない EOF が発生しました。
/script.sh: 行 184: 構文エラー: 予期しないファイルの終わり
解決済み:コードを確認した後、最初の行に一重引用符がないことがわかりました。他とペアリングすると問題が解決します。
ベストアンサー1
シェルは`echo ...`
ここのドキュメントでさまざまな種類の拡張を行います(ユーザーのようなコマンドの置換だけでなく、変数や算術拡張も含みます)。区切り文字を引用しない限り。
比較する:
cat <<EOF
$$ $((2 + 3)) $(hostname) `date`
EOF
4502 5 fazq Mon Mar 11 23:03:27 EET 2019
比較:
cat <<'EOF'
$$ $((2 + 3)) $(hostname) `date`
EOF
$$ $((2 + 3)) $(hostname) `date`
最後のケースでは、二重引用符と一重引用符の両方が大丈夫です。