`
問題は、コマンド内の終了バッククォートの配置です。
export PATH=`echo ${PATH} | awk -v RS=: -v ORS=: '/SDE/ {next} {print}'` | sed 's/:*$//'
推奨される$(...)
表記法を使用した場合、これは次と同等であることがわかります。
export PATH=$(echo ${PATH} | awk -v RS=: -v ORS=: '/SDE/ {next} {print}') | sed 's/:*$//'
export
操作の出力を にパイプしますが、sed
サイレントexport
です。
使用する:
export PATH=$(echo ${PATH} | awk -v RS=: -v ORS=: '/SDE/ {next} {print}' | sed 's/:*$//')
誤ったコマンドがそのままコピーされた回答を修正しました。Tripleeeがコメントで指摘しているように、私はawk
解決策に完全に納得しているわけではありませんが、質問は「コードの何が問題だったのか」であり、答えは「逆引用符が配置されている場所」です。awk
スクリプトは、PATH 内の任意の位置にある PATH の要素の削除を処理します。スクリプトは、PATH の末尾にある現在のディレクトリが暗黙的に使用されないように、sed
末尾がないことを確認するだけです。:
参照:シェル スクリプトでPATH 要素を操作する方法と、PATH 変数を複製しないようにする方法clnpath
のスクリプト— スクリプトは、質問の主題にもかかわらず、Bourne、Korn、Bash シェルなどの POSIX シェル用です。ここで使用されている と の表記の違いの 1 つは、フル パス名のみを削除することです。部分的なパス要素の一致を試みません。csh
clnpath
clnpath
export PATH=$(clnpath $PATH /opt/SDE/bin)
削除するパス要素が だった場合/opt/SDE/bin
。、、およびその他のパスのような変数clnpath
を維持するために使用できることに注意してください。もちろん、呼び出しもできます。LD_LIBRARY_PATH
CDPATH
MANPATH
awk
/SDE/
ちなみに、スクリプトのパターンawk
が削除されることに注意してください/opt/USDER/bin
。正規表現のスラッシュは、パス名のスラッシュとは何の関係もありません。