関数内にネストされたパイプコマンドの末尾にあるハイフン(-)は無視されますか?

関数内にネストされたパイプコマンドの末尾にあるハイフン(-)は無視されますか?

私はUbuntu 16.04(xenial)とBash 4.3.48(1)を使用しています。

Stephen Kittの回答に基づいて今回の会議で、名前付き関数の一部として次のコマンドを実行してみましたimb()

mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -

関数のあるファイルを取得しましたimb()

source ~/functions.sh

機能

imb() {
    drt="/var/www/html"
    date="$(date +\%F-\%T)"
    mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" - # Note the hyphen before this comment;
    zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*"
    rm -f "$drt/db-$date.zip"
}

私の質問

zip次のエラーで関数呼び出しが失敗します。

zip error: Nothing to do! (/var/www/html/db-2018-04-13-22:27:47.zip)

これはハイフンが無視されているために発生するようです。

type -a imb

出力:

imb is a function

imb () {
    date="$(date +\%F-\%T)";
    mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip";
    zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*";
    rm -f "$drt/db-$date.zip" 
}

ここにハイフンが欠けていることがわかりました。

私の質問

この機能が失敗する理由/ Bashがハイフンを無視するのはなぜですか?

ベストアンサー1

ご使用の環境に以前のバージョンの関数があり、ファイルを編集して欠落しています-

ファイルを再インポートするか、シェルを再起動すると、ファイルに表示される関数の正しいバージョンが得られます。そのバージョンが動作します。

これがすべてです。ここで説明する興味深い内容はありません。環境は環境設定ファイルと同期せず、しばしば一時的な混乱を招く非常に一般的な状況ですが、このように簡単に修正できます。

おすすめ記事