59777
シェルスクリプトについて質問があります。

下記のコード内で2箇所の `>&2` という記述がありますがどういう意味でしょうか。

>
```

>     #!/bin/bash
>  
>     set -e
>  
>     host="$1"
>     shift
>     cmd="$@"
>  
>     until psql -h "$host" -U "postgres" -c '\l'; do
>       >&2 echo "Postgres is unavailable - sleeping"
>       sleep 1
>     done
>  
>     >&2 echo "Postgres is up - executing command"
>     exec $cmd
>  
```

>
> 引用元: <http://docs.docker.jp/compose/startup-order.html>

`$ ls >&2` という形で `ls` の標準出力を標準エラー出力にリダイレクトするというような理解はあります。

自分の現状の認識は `psql -h "$host" -U "postgres" -c '\l';`
の結果を標準エラー出力にリダイレクトしているのかもしれない。  
ただ、このような形の記述を見たことがないので理解できずにいる状態です。また何のためにエラー出力にリダイレクトしているのかという部分も疑問です。

長くなってしまいましたが、ぜひご教授ください。
CC BY-SA 4.0
2019-10-18T00:11:06.857
59776
2019-10-18T01:04:43.447
2019-10-18T00:55:50.987
19110
34792
question
docker bash shellscript
行頭にある >&2 の意味（docker-composeによるコンテナ起動順制御に使用）
コマンドの前に書かれた `>&2` も標準エラー出力にリダイレクトするという意味です。シェルスクリプトのログをエラー出力に流すために使われています。

Bash のマニュアル [3.6
Redirections](https://www.gnu.org/software/bash/manual/html_node/Redirections.html)
に次のとおり書かれています。

> The following redirection operators may precede or appear anywhere within a
> simple command or may follow a command.  
>  (和訳) リダイレクト用の以下の演算子は、単純なコマンドの前に置いたり途中に置いたり、後に置いたりします。

今回のような使い方をすると、`echo`
の出力のみをエラー出力に流すことになります。つまり、このシェルスクリプトのログメッセージをエラー出力に出しています。
CC BY-SA 4.0
2019-10-18T01:04:43.447
59777
2019-10-18T01:04:43.447
19110
59776
answer