ターミナルで標準出力と標準エラー出力を同じファイルに追加出力する方法

iMac2020またはMacmini2018で、macOS 11.6.6のターミナル(version 2.11 (440) )を使用しています。

CentOS7.9(HP DL580 G7またはSuperMicro 8048B-TRFT)では、「&>>」で左辺にコマンド、右辺にファイルを指定すれば、コマンドラインでも、シェルスクリプトファイルで実行させても、コマンドの標準出力と標準エラー出力の両方がファイルにテキストで追加出力されます。

しかし、macOS 11.6.6のターミナルを使って同じ事を行わせると、シェルスクリプトファイル(下記)

--- test.shファイル開始 ---

#!/bin/bash

date &> s.txt

date &>> s.txt

--- test.shファイル終了 ---

をbashで実行させた場合

(base) hogeiMac ~ % bash test.sh

test.sh: line 3: syntax error near unexpected token `>'

test.sh: line 3: `date &>> s.txt'

となって処理が中断されてしまいます。

コマンドラインで同じコマンドを直接入力してリターンで実行させてもエラーにはなりません。

何が違うのでしょうか。

解決策をお教えいただきたくお願いいたします。

なお、miniconda3をインストールしてあります。

Mac mini 2018 or later

投稿日 2022/06/04 06:01

返信
スレッドに付いたマーク ランキングトップの返信

投稿日 2022/06/04 07:07

#!/bin/bash を #!/bin/zsh としてzshで実行すればエラーになりません。


返信: 7

2022/06/09 16:52 beyshaef への返信

bash のマニュアルを読んだ限りでは、リダイレクトに &>>word が加えられたのは v4.0 のようです。macOS Big Sur に搭載の bash は v3.2 なのでシンタックスエラーとなり、Linux はバージョンが新しいので動く、、、ということだと思います。


それと、Big Sur の Terminal に直接入力して問題ないのは使用するシェルが zsh だからで、bash だとエラーとなるはずです。


bash -c 'date &>>s.txt'


ちなみに bash のソースは下記からダウンロードできます。適当にダウンロードして man コマンドによりマニュアルを表示してみるのも良いと思います。


macOS

https://opensource.apple.com/releases/


Linux

https://www.gnu.org/software/bash/


亀レスになりましたが、以上ご参考まで。


2022/06/04 16:47 はに への返信

vmware(母艦はmonterey)上のmacosで見てみると、もうel capitanのターミナルでもbashでやる限り同じエラーになります(vmware上だからかもしれませんが。el capitanがネイティブで動く環境は利用できないので試してません)。bashの古いバージョンではセキュリティホールがいろいろ報告されたりしてましたので、セキュリティアップデートの過程でそれを潰すためにできないようにされてるのかも。

Appleのシェルの推奨はzshで、bashを推奨してません。インターネット上の記事では、bashのライセンスモデルがAppleの方針と合わないからと言うことです。それでかなり前からbashのバージョンは古いままで、Apple独自のパッチを当ててます。

2022/06/04 20:20 はに への返信

詳細なご説明、心より御礼申し上げます。

今まではbash一辺倒で、zshはどうしても必要になってからと、サボって来たのですが、今回の不具合と、はに様のご回答およびご説明で、zshを学ぼうと思うに至りました。

本当にありがとうございます。

重ねてお礼申し上げます。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

ターミナルで標準出力と標準エラー出力を同じファイルに追加出力する方法

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。