MB_CUR_MAX
被 glibc 定义为“一个正整数表达式,它是当前语言环境中多字节字符的最大字节数”。
如果我打印我得到的值1
。我认为这是因为 CC
默认使用区域设置,即使我系统的区域设置是en_US.UTF-8
.
如果我添加setlocale(LC_ALL, "")
到我的程序中,它应该启用使用环境的区域设置,然后MB_CUR_MAX
变成6
.
现在我的问题是,为什么是 6?UTF-8 不是每个代码点有 1 到 4 个字节的编码吗?
MB_CUR_MAX
被 glibc 定义为“一个正整数表达式,它是当前语言环境中多字节字符的最大字节数”。
如果我打印我得到的值1
。我认为这是因为 CC
默认使用区域设置,即使我系统的区域设置是en_US.UTF-8
.
如果我添加setlocale(LC_ALL, "")
到我的程序中,它应该启用使用环境的区域设置,然后MB_CUR_MAX
变成6
.
现在我的问题是,为什么是 6?UTF-8 不是每个代码点有 1 到 4 个字节的编码吗?
GNU Screen 手册说:
`-d -m'
Start `screen' in _detached mode. This creates a new session
but doesn't attach to it. This is useful for system startup
scripts.
`-D -m'
This also starts `screen' in _detached_ mode, but doesn't fork
a new process. The command exits if the session terminates.
-dm
我很清楚:
screen
分叉一个新进程来运行提供的命令(如果未指定任何内容,则为 shell)。screen
是可以附加的东西。我注意到它-dm
返回了 shell 的控制权,但-Dm
会阻塞。
所以我的问题是:
-Dm
阻塞?这与它缺乏分叉有何关系?-Dm
代替 的用例是什么-dm
?谢谢!
locate
(或者更确切地说,updatedb
)有点简单:它获取find
所需路径(通常是“/”)的输出,对其进行排序,然后使用前置压缩工具(frcode
)对其进行压缩,其中连续的公共前缀被替换为重复字符的数量。
所以我想知道,是什么阻止人们为全文搜索创建类似的东西?比如说,串联系统中的每个文件,用格式对每一行进行排序line:filename:linenumber
,然后进行前压缩怎么样?我猜你最终会得到一个更快的grep
,但代价是在每日/每周 cron 作业运行之前就过时了,就像locate
.
也许locategrep
对整个系统来说有点杀伤力,但我认为它对于加速一个大型项目很有用,而该项目在一天的剩余时间内不会发生太大变化。
类似的东西是否已经存在或者使用一些已知的工具来实现是微不足道的?
注意:我宁愿避免包含纯文本搜索之外的功能的企业级解决方案(但我很欣赏正则表达式支持)。
我有以下脚本:
suspense_cleanup () {
echo "Suspense clean up..."
}
int_cleanup () {
echo "Int clean up..."
exit 0
}
trap 'suspense_cleanup' SIGTSTP
trap 'int_cleanup' SIGINT
sleep 600
如果我运行它并按Ctrl-C
, Int clean up...
show 并退出。
但是如果我按Ctrl-Z
,^Z
字符会显示在屏幕上,然后挂起。
我怎么能够:
Ctrl-Z
,甚至可能回显某些内容,并且随机阅读 glibc 文档,我发现了这一点:
禁用 SUSP 字符正常解释的应用程序应该为用户提供一些其他机制来停止作业。当用户调用此机制时,程序应该向该进程的进程组发送SIGTSTP信号,而不仅仅是向进程本身发送。
但我不确定这是否适用于此,而且无论如何它似乎不起作用。
上下文:我正在尝试制作一个交互式 shell 脚本,它支持 Vim/Neovim 支持的所有与悬念相关的功能。即:
:suspend
,而不只是让用户按 Ctrl-z)编辑:更改sleep 600
为for x in {1..100}; do sleep 6; done
也不起作用。
编辑2:它在替换为 时sleep 600
有效sleep 600 & wait
。我完全不确定它为什么或如何工作,或者这样的东西有什么局限性。
据我所知,在任何终端多路复用器上按 Ctrl-Z,或尝试在后台启动它们,都不会执行任何操作或崩溃。
我知道,从某种意义上说,终端多路复用器是作业控制的“替代品”,通常它们有自己的挂起和恢复机制。不过,我想知道是否可以以某种方式将它们集成到基于 shell 作业控制的工作流程中。
回答:
假设我的 Bash 有一些广泛的~/.bashrc
自定义功能,不仅可以帮助我交互使用,还可以帮助我编写脚本(别名、函数、变量等)。我希望我的所有脚本都可以使用此功能,因此我正在考虑设置BASH_ENV
为~/.bashrc
(这似乎是做到这一点的方法。)
我的问题是,这有什么问题吗?
~/.bashrc
. 但我认为这是一个可以管理的问题,因为无论如何我都会在使用它们之前对其进行审查(或者盲目地相信像 Github 明星这样深奥的统计数据来认为它们是安全的),并且只是偶尔降低自己的水平来取消任何可能行为不当的脚本BASH_ENV
。~/.bashrc
并没有那么重,如果我想要速度,我就不会使用 shell 脚本。~/.bashrc
只会成为我彻底 ganking 的主菜中的温和调味品。~/.bashrc
文件分成两个文件,一个用于交互式使用,一个用于脚本编写,并且可能将其设置为交互式文件是脚本文件的超集。但除了那种模糊的纯洁感之外,这听起来似乎是付出了太多的努力却收获太少。~/.bashrc
我正在使用的任何功能。这听起来不像是一个 NP 问题。~/.bashrc
表明这样的脚本应该首先用另一种语言编写。“是的,而且……”是即兴喜剧中的一个很棒的经验法则。在 UNIX 世界中则不然。
当我运行这个公认的愚蠢yes&
命令时,我无法中断它。终端崩溃或陷入循环。
我希望该yes
进程立即暂停,因为如果尝试写入标准输出,后台的任何进程都应该暂停,但情况似乎并非如此,我想知道为什么。
我只想更改特定记录的字段分隔符 ( ),并且我希望使用新的字段分隔符重新计算FS
记录 ( $0
)、字段 ( $N
) 和字段数 ( )。NF
但这似乎不起作用。
示例:这里我有一行被解释为由空格分隔的三个字段。如果我将字段分隔符更改为n
并强制重新构造记录 ( $1 = $1
),记录将保持不变,如打印所示$1
:
$ echo 'one two three' | awk '1 {FS="n" ; OFS=":" ; $1 = $1 ; print $1}'
> one
但我希望输出是:
> o
通过运行强制重新构造记录的技巧$1 = $1
取自gawk 手册。所以我希望它能起作用。我不确定可能是什么问题:
尝试简单地通过设置
FS
和更改记录中的字段分隔符是一个常见的错误OFS
,然后期望一个普通的print $0
打印修改后的记录。但这是行不通的,因为没有做任何改变记录本身的事情。相反,您必须强制重建记录,通常使用
$1 = $1
[...]
(我正在使用 GNU Awk 5.2.2)