/bin/touch $FLAG を使用してファイルを生成することはできません。発生したエラーは、/bin/touch: 不足しているファイルオペランドです。

/bin/touch $FLAG を使用してファイルを生成することはできません。発生したエラーは、/bin/touch: 不足しているファイルオペランドです。
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

良い追加情報も得ましたが、これはbashUbuntuかもしれません。

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 \')"

おすすめ記事