PATH=/opt/omd/sites/icinga/var/TEST
FLAG="$PATH/$1_$3.flag" | tr -d \'
一重引用符がありますが、$3
それを削除したいです。したがって、上記のtr -d \'
。
次に、次を実行しました。
/bin/touch $FLAG
そして得る:
/bin/touch: missing file operand Try '/bin/touch --help' for more information.
私も試しました
/bin/touch "$FLAG"
しかし、問題がno such file or directory
発生しました。誰でも私を案内できますか?
ベストアンサー1
2つの質問があります。
主な問題:
変数の割り当て動作しませんあなたが思うように:
FLAG="$PATH/$1_$3.flag" | tr -d \'
これは、で区切られた2つのコマンドですpipe
。これは、最初のコマンド(変数割り当て)の出力を2番目のコマンド()に送信することを意味しますtr
。 2番目のコマンドは単に結果を印刷します。変数割り当ての出力が空なので、 の出力も空ですtr
。
変数の割り当ては実際には機能しますが、その一部であるため、pipe
別のプロセスで実行され、touch
基本プロセス(たとえば、後続のコマンドを含む)にアクセスすることはできません。
コマンドを含む変数の割り当てには、以下を使用する必要があります。コマンドの置き換え:
FLAG="$(printf '%s' "$PATH/$1_$3.flag" | tr -d \')"
2番目の用語変数をオーバーライドすることですPATH
。
PATH=/opt/omd/sites/icinga/var/TEST
FLAG="$PATH/$1_$3.flag" | tr -d \'
これでtr
動作しなくなり、次のエラーが発生します。
tr: command not found
良い追加情報も得ましたが、これはbash
Ubuntuかもしれません。
Command 'tr' is available in the following places
* /bin/tr
* /usr/bin/tr
The command could not be located because '/usr/bin:/bin' is not included in the PATH environment variable.
この問題を解決するには、次の問題も発生しないでください。エマルジョン、続くbash変数命名規則:
path=/opt/omd/sites/icinga/var/TEST
flag="$(printf '%s' "$path/$1_$3.flag" | tr -d \')"