我遇到了一个有时有效有时不起作用的命令,即使在bashshell中快速连续执行多次(我没有在其他 shell 中测试过这种行为)。问题已定位为读取管道末尾语句BEGIN块中的变量awk。在某些执行期间,变量在BEGIN块中被正确读取,而在其他执行期间,操作失败。假设这种异常行为可以被其他人复制(并且不是我的系统出现问题的结果),它的不一致可以解释吗?
将以下名为的文件作为输入tmp:
cat > tmp <<EOF
a a
b *
aa a
aaa a
aa a
a a
c *
aaa a
aaaa a
d *
aaa a
a a
aaaaa a
e *
aaaa a
aaa a
f *
aa a
a a
g *
EOF
Run Code Online (Sandbox Code Playgroud)
在我的系统上,管道
awk '{if($2!~/\*/) print $1}' tmp | tee >(wc -l | awk '{print $1}' > n.txt) | sort | uniq -c …Run Code Online (Sandbox Code Playgroud) 可以bash为定义大小的数组预先分配内存吗?我declare -a arr在循环 ( arr+=("$str")) 中迭代地将字符串添加到数组(由 声明),并且想知道是否可以通过预分配适当大小的内存(例如,包含不大于 512 个字符的字符串的 10,000 个元素)来提高性能。
在bash v4.1.2(2) 上,以下简单的语句(仅用作演示问题的最小示例)给出了看似随机的输出:
$ for n in {0..1000}; do echo "$n"; done |
tee >(head -n2) >(sort -grk1,1 | head -n3) >/dev/null
Run Code Online (Sandbox Code Playgroud)
而以下给出了一致的输出:
$ seq 0 10000 | tee >(head -n2) >(sort -grk1,1 | head -n3) >/dev/null
Run Code Online (Sandbox Code Playgroud)
具体来说,对于第一条语句,该sort命令选择明显随机的连续三元组(例如,226,225,224;52,51,50;174,173,172;等等)。要了解输出的异质性,可以多次运行有问题的命令,然后列出不同可能性的数量:
$ seq -w 0 2000 | while read x; do for n in {0..1000}; do echo "$n"; done |
tee >(head -n2) >(sort -grk1,1 | head -n3) >/dev/null | cat > "file_${x}"; done
Run Code Online (Sandbox Code Playgroud)
计算各种输出的出现次数:
$ for f in …Run Code Online (Sandbox Code Playgroud) 我发现我无法将 imagemagick 的内存/地图/磁盘限制增加到其当前值以上:
$ identify -list resource
Resource limits:
Width: 16KP
Height: 16KP
Area: 128MP
Memory: 256MiB
Map: 512MiB
Disk: 1GiB
File: 768
Thread: 4
Throttle: 0
Time: unlimited
Run Code Online (Sandbox Code Playgroud)
虽然我可以减少上述值的限制,但我不能增加它们:
$ identify -limit memory 128MiB -list resource | grep Mem
Memory: 128MiB
$ identify -limit memory 512MiB -list resource | grep Mem
Memory: 256MiB
$ MAGICK_DISK_LIMIT=0.2GiB identify -list resource | grep Disk
Disk: 204.8MiB
$ MAGICK_DISK_LIMIT=2GiB identify -list resource | grep Disk
Disk: 1GiB
Run Code Online (Sandbox Code Playgroud)
如何增加超过默认值?我的系统有 8 GB 的 RAM、8 GB …
我xterm-keys在 tmux 中启用了正常的 xterm 键绑定,例如使用Ctrl 箭头键进行全字移动。
但是,通过启用xterm-keys它会导致Shift-Enter在vim. 特别是,Shift-Enter在正常模式下按下可切换从光标位置开始的 13 个字母的大写,而与单词边界无关。在命令模式下按这些键会退出该模式,然后切换 13 个字母的大写。通常在 中vim,此按键的结果是向下移动一行(正常模式)或执行任何输入的命令(命令模式),据我所知,这些是默认行为。
我转载空这个效果.tmux.conf和.vimrc文件,所以它不是其他配置设置的副作用。
bash ×2
array ×1
awk ×1
concurrency ×1
imagemagick ×1
memory ×1
performance ×1
shell-script ×1
tee ×1
tmux ×1
vim ×1
xterm ×1