【问题标题】:Using asterisk in bash ls alias在 bash ls 别名中使用星号
【发布时间】:2012-11-09 12:02:38
【问题描述】:

在 ~/.bash_aliases 中,我想为重复单词创建一个别名,该别名将重复给定命令 n 次。

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

我想使用重复来列出目录中更新的文件,所以我做了以下函数 (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

我应该怎样做才能让我的函数正确处理星号?

【问题讨论】:

  • 如果你在 GNU/Linux 系统上,你应该man watch。可以为您节省一些编程时间。
  • 是的,虽然它更像是一个 MWE,而不是我面临的确切问题。

标签: bash alias repeat ls


【解决方案1】:

这里的问题是您的星号正在被交互式外壳扩展。当你执行别名时,你给它一个文件列表,而不是一个带星号的文件规范。

我认为除了转义星号并让别名进行扩展之外,没有简单的方法可以解决此问题。这是一个坏主意,因为带有有趣字符的文件名可能会仅仅因为它们的存在而影响正在执行的内容。

【讨论】:

    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2014-10-06
    • 2013-03-05
    相关资源
    最近更新 更多