3

〜/ .bash_aliasesで、指定されたコマンドをn回繰り返す繰り返し単語のエイリアスを作成します。

repeat() {
    n=$1
    shift
    while [ $(( n -= 1 )) -ge 0 ]
    do
        "$@"
    done
}

更新されたファイルをディレクトリに一覧表示するためにrepeatを使用したいので、次の関数(WAIT、CLEAR、LIST)を作成しました。

wcls() {
    m=$1
    shift
    clear
    date
    ls -l "$@"
    sleep $m
}

my_file1とmy_file2のフォルダーがあります。スクリプトを実行した場合:

repeat 500 wcls 2 my_file*

私は得る

my_file1 ...
my_file2 ...

その間、my_file2をmy_file3に変更すると、スクリプトは次の内容を更新しません。

my_file1 ...
my_file2 no such file or directory

関数がアスタリスクを正しく処理するにはどうすればよいですか?

4

1 に答える 1

2

ここでの問題は、アスタリスクがインタラクティブシェルによって展開されていることです。エイリアスを実行するときは、アスタリスクが付いたfilespecではなく、ファイルのリストをフィードします。

アスタリスクをエスケープしてエイリアスに拡張を行わせる以外に、これを回避する簡単な方法はないと思います。これは悪い考えです。面白い文字を含むファイル名は、その存在だけで実行される内容に影響を与える可能性があるためです。

于 2012-11-09T12:50:03.930 に答える