
スクリプトファイルを分析し、次の行を見つけました。
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' /home/jboss/runJBOSSEAP.sh
私はまだこのコマンドが何をしているのかわかりません。私はこれが-i
インライン作業であることを知っています。しかし、それが何をしているのか私はまだ知りません。この行を理解するのに役立ちます。
答え1
sed -i
-i
ファイルが所定の位置で編集されることを示します。つまり、同じ名前で新しいバージョンを作成します。
/JBOSS_HOME\/bin\/run.sh/
スラッシュで区切られたパターンで、バックスラッシュで引用されたパターンにはスラッシュが含まれているのでJBOSS_HOME/bin/run.sh
。
i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp '
パターンマッチングをi
使用して行を挿入すると(現在の行の前に)コマンドが実行されます。追加する行はバックスラッシュで区切られているため、文字列が追加されますexport TMP_FOLDER=$JBOSS_HOME/server/default/tmp
。
/home/jboss/runJBOSSEAP.sh
宛先ファイル名。
例えば
$ echo JBOSS_HOME/bin/run.sh > pla
$ sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' pla
$ cat pla
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp
JBOSS_HOME/bin/run.sh
例とほぼ同じです。ここ
答え2
ilkkachuの答えは素晴らしい、広範でサポートされています。 BSD sed(OS Xと同様)を使用している場合は、ここに注意事項を追加してください。これ:
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
sed: 1: "foo": invalid command code f
動作しません。 BSD sedで動作させるには、まず次の-i
オプションを変更する必要がありますsed -i.""
。また、次のように別の行に挿入内容を入力する必要があります。
sed -i."" '/JBOSS_HOME\/bin\/run.sh/i \
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
ただし、これはOS XでBSD sedを使用している場合にのみ適用されます。 GNU sedでは動作しません。