我正在尝试使用 搜索文件find
,并将这些文件放入 Bash 数组中,以便我可以对它们进行其他操作(例如ls
或grep
它们)。但我不明白为什么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
的输出作为其标准输入并将这些字符串放入数组中?
我正在尝试从字符串中提取两个数值并使用awk
(gawk
是我专门使用的)将它们分配给变量。我想将 tmux 版本字符串中的主要和次要版本号提取到awk
变量中,例如:
tmux 2.8
; maj == 2
和min == 8
tmux 1.9a
; maj == 1
和min == 9
tmux 2.10
; maj == 2
和min == 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
文件中使用(我希望使用这些东西的地方)很容易导致配置文件中的行非常长,所以我想知道是否有办法将这两个变量结合起来分配到一个语句中以节省空间……或以任何其他方式从输入中收集这两个变量并节省空间。 …
我想知道是否有办法关闭终端应用程序的终端铃声,例如man
和less
,例如,当您已经在文件/手册页的顶部并按“k”尝试向上滚动时。通常,我只是完全关闭终端模拟器上的铃声,但流行的xset b off
命令似乎对我的设置不起作用:我正在运行 XTerm 从 Ubuntu 16.04(特别是在 WSL 中)通过 X11 转发到 Xming . 所以我也很感激关于如何关闭 XTerm 铃声的任何注释,如果有的话。
我知道如何关闭readline
通过把的钟声set bell-style none
中~/.inputrc
,但不幸的是这不仅有利于输入(如多个可用的选项卡落成),滚动人/更少页面时,不是。
我也知道关闭铃声的-Q
命令行 arg less
,但我想我希望有一个更通用的设置/命令适用于两者man
和less
(可能还有其他人)。
我想如果我不能完全关闭 XTerm 的铃声,我将尝试学习如何关闭每个应用程序的铃声,一个一个,直到我至少得到所有烦人的铃声。
我相信你们很多人都熟悉pathmunge
Bourne-shell 兼容的点文件中使用的规范函数来防止PATH
变量中的重复条目。我还为LD_LIBRARY_PATH
和MANPATH
变量创建了类似的函数,因此在我的 中有以下三个函数.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)