1

Ubuntuで動作し、必要に応じて出力を提供するシェルスクリプトがあります。slackware linuxバージョンで同じものをテストすると、スクリプトが失敗します。

スクリプトは次の場所で失敗します:

dialog --title "Test" --gauge "Copying file." 6 100 < <(
    rsync -a --progress test.tar.gz /media/sda1 | 
    unbuffer -p grep -o "[0-9]*%" | 
    unbuffer -p cut -f1 -d '%'  
    )

エラーは次のとおりです。

Syntax error near unexpected token `<'

スクリプトの実行に失敗した2つのオペレーティングシステムの違いは何でしょうか。ダイアログコマンドや角かっこなどを削除すると、スクリプトは正常に実行されます。

4

2 に答える 2

2

ほとんどの場合、bash以外のシェルでbashスクリプトを実行しようとしています。または古いbashバージョンを使用します。

まず、bashを明示的に実行してみてください。

bash script.sh

また、bashを指すようにシバンを修正する必要があります。

#!/bin/bash
于 2012-08-22T20:28:32.203 に答える
1

[以下の更新]

表記はとに< <( ... )固有です。構文エラーは、Slackwareシェルによって認識されない明確な兆候です。 bashzsh

slackwareがbashを使用していないか、そのバージョンのbashがこの機能には古すぎます。両方のプラットフォームで$BASH_VERSIONの値を確認してください。

の可能な代替案

cat < <(
    ...
    ...
)

になり得る:

cat <<< "$(
    ...
    ...
)"

これはbash、ksh93、およびzshで機能し、少し長くなっています。

アップデート

あなたのフィードバックに基づいて、私はあなたがここで使おうとしている実際のパイプラインを見てきました。--progress出力の列3を、ダイアログのグラフィカルな進行状況インジケーターの入力として使用するのはあなたの意図だと思います。

小さなファイルがたくさんあるディレクトリでこれを試しました。このパーセンテージインジケーターがファイルごとであることをご存知ですか?私の小さなファイルでは、rsyncはファイルごとに1つの更新のみを提供しました。すべてのファイルが一度に書き込まれるため、すべてのパーセンテージはに等しくなりました100%

于 2012-08-22T21:40:11.267 に答える