コマンドはシェルで実行されますが、script.sh では実行されません。

コマンドはシェルで実行されますが、script.sh では実行されません。

joinパイプとファイルの2つのソースから作成しようとしています。私は次のような簡単な文章を書きました。

FILENAME=$TMPDIR".netstat"; \
join -t , $FILENAME <(nettop -t wifi -P -x -L1 | cut -d , -f 2,5,6 | tail -n +2) | \
awk '{print $0}'

通常はシェルで実行されますが、script.shでは実行されません(以下のスクリプト全体)。

./script.sh: line 16: syntax error near unexpected token `('

変数、パラメータ、またはコマンドを完全にマスクするために、式に別の引用符を使用してみましたが、スクリプトを実行できませんでした。

誰でも助けることができますか?

PSこのスクリプトはmacOS Sierra 10.12.3のGeekTool(シェルウィジェット)によって呼び出されます。

PPS はい、私はOS Xが「Unix&Linux」ではないことを知っていますが、その違いはそれほど大きくないと思います。

一部のコメントを含む完全なスクリプトは次のとおりです。

#!/bin/sh

FILENAME=$TMPDIR".netstat"

# checking if existing stats file
if [ ! -f $FILENAME ]; then
    nettop -t wifi -P -x -L 1 | cut -d , -f 2,5,6 | tail -n +2 > $FILENAME # save stats to file
    exit
fi

fts=`stat -r $FILENAME | cut  -d " " -f 10` # get timestamp of stats file
now=`date +%s`    # get current datetime

join -t, $FILENAME <(nettop -t wifi -P -x -L1 | cut -d , -f 2,5,6 | tail -n +2) | awk '{print $0}'

直す。解決済み

シェルボーンに変わった#!/bin/bash

ベストアンサー1

これは、スクリプトの実行に使用するシェルがインタラクティブシェルと異なるために発生することがほぼ確実です。

shebang行はなので、#!/bin/shスクリプトはインタプリタによって実行されます/bin/sh。 Ubuntuなどのディストリビューションには、プロセスの交換など、/bin/shbashのすべての機能をサポートしていないダッシュシェルがあります。<()

回避策は、呼び出しスクリプトを使用する/path/to/bash /path/to/scriptか、シャーバン行(#!/path/to/bash)を変更することです。

おすすめ記事