在bash ls别名中使用星号

时间:2012-11-09 12:02:38

标签: bash alias repeat ls

在〜/ .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

我应该怎样做才能正确处理星号?

1 个答案:

答案 0 :(得分:2)

这里的问题是你的星号是由交互式shell扩展的。当您执行别名时,您需要提供一个文件列表,而不是带有星号的文件规范。

除了逃避你的星号并让别名进行扩展之外,我认为除此之外还有一个简单的方法。这是一个坏主意,因为那些带有趣字符的文件名可能只会影响它们存在时所执行的内容。