小编vil*_*apx的帖子

Bash:管道“find”输出到“readarray”

我正在尝试使用 搜索文件find,并将这些文件放入 Bash 数组中,以便我可以对它们进行其他操作(例如lsgrep它们)。但我不明白为什么readarray不读取通过find管道输入的输出。

假设我在当前目录中有两个文件,file1.txt并且file2.txt. 所以find输出如下:

$ find . -name "file*"
./file1.txt
./file2.txt
Run Code Online (Sandbox Code Playgroud)

所以我想把它传送到一个数组中,它的两个元素是字符串"./file1.txt""./file2.txt"(显然没有引号)。

我已经尝试过这个,除此之外还有其他一些事情:

$ declare -a FILES
$ find . -name "file*" | readarray FILES
$ echo "${FILES[@]}"; echo "${#FILES[@]}"

0
Run Code Online (Sandbox Code Playgroud)

echo输出中可以看出,我的数组是空的。

那么我到底做错了什么?为什么readarray不将 readingfind的输出作为其标准输入并将这些字符串放入数组中?

bash find

18
推荐指数
2
解决办法
1万
查看次数

awk 一次分配给多个变量

我正在尝试从字符串中提取两个数值并使用awk(gawk是我专门使用的)将它们分配给变量。我想将 tmux 版本字符串中的主要和次要版本号提取到awk变量中,例如:

  • 输入:tmux 2.8; maj == 2min == 8
  • 输入:tmux 1.9a; maj == 1min == 9
  • 输入:tmux 2.10; maj == 2min == 10

假设我的输入来自tmux -V标准输入,我目前有以下内容:

tmux -V | awk '{
                  maj = +gensub(/([0-9]+)\..*/, "\\1", "g", $2);
                  min = +gensub(/.*\.([0-9]+).*/, "\\1", "g", $2);
                  # ...do something with maj and min...
               }'
Run Code Online (Sandbox Code Playgroud)

这是有效的,但正如 tmux 的许多用户所知,if-shell.tmux.conf文件中使用(我希望使用这些东西的地方)很容易导致配置文件中的行非常长,所以我想知道是否有办法将这两个变量结合起来分配到一个语句中以节省空间……或以任何其他方式从输入中收集这两个变量并节省空间。 …

awk gawk

11
推荐指数
3
解决办法
7904
查看次数

关闭手册页和更少的终端铃声

我想知道是否有办法关闭终端应用程序的终端铃声,例如manless,例如,当您已经在文件/手册页的顶部并按“k”尝试向上滚动时。通常,我只是完全关闭终端模拟器上的铃声,但流行的xset b off命令似乎对我的设置不起作用:我正在运行 XTerm 从 Ubuntu 16.04(特别是在 WSL 中)通过 X11 转发到 Xming . 所以我也很感激关于如何关闭 XTerm 铃声的任何注释,如果有的话。

我知道如何关闭readline通过把的钟声set bell-style none~/.inputrc,但不幸的是这不仅有利于输入(如多个可用的选项卡落成),滚动人/更少页面时,不是。

我也知道关闭铃声的-Q命令行 arg less,但我想我希望有一个更通用的设置/命令适用于两者manless(可能还有其他人)。

我想如果我不能完全关闭 XTerm 的铃声,我将尝试学习如何关闭每个应用程序的铃声,一个一个,直到我至少得到所有烦人的铃声。

less man xterm bell

3
推荐指数
1
解决办法
1932
查看次数

用于任意“PATH”类变量的“pathmunge”函数

我相信你们很多人都熟悉pathmungeBourne-shell 兼容的点文件中使用的规范函数来防止PATH变量中的重复条目。我还为LD_LIBRARY_PATHMANPATH变量创建了类似的函数,因此在我的 中有以下三个函数.bashrc

# function to avoid adding duplicate entries to the PATH
pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}

# function to avoid adding duplicate entries to the LD_LIBRARY_PATH
ldpathmunge () {
    case ":${LD_LIBRARY_PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$1
            else
                LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH
            fi
    esac
}

# …
Run Code Online (Sandbox Code Playgroud)

bash

2
推荐指数
1
解决办法
1593
查看次数

标签 统计

bash ×2

awk ×1

bell ×1

find ×1

gawk ×1

less ×1

man ×1

xterm ×1