相关疑难解决方法(0)

为什么使用 shell 循环处理文本被认为是不好的做法?

在 POSIX shell 中使用while 循环来处理文本通常被认为是不好的做法吗?

正如Stéphane Chazelas 所指出的,不使用 shell 循环的一些原因是概念可靠性易读性性能安全性

这个答案解释了可靠性易读性方面:

while IFS= read -r line <&3; do
  printf '%s\n' "$line"
done 3< "$InputFile"
Run Code Online (Sandbox Code Playgroud)

为了性能,从文件或管道读取时,while循环和读取非常慢,因为内置read shell一次读取一个字符。

怎么样的概念安全性方面?

shell text-processing

241
推荐指数
4
解决办法
5万
查看次数

内置命令和非内置命令有什么区别?

内置命令和另一个名义上可以做同样事情的命令之间有什么内在的区别吗?

例如。内置函数是否得到“特殊”处理?...运行它们的开销是否更少?.. 或者它们只是简单地“内置”;像你汽车的仪表盘?

...是否有这些内置函数的明确(当前)列表?

shell bash utilities shell-builtin

77
推荐指数
3
解决办法
3万
查看次数

BusyBox 命令是真正内置的吗?

我在阅读著名的Unix Recovery Legend 时,突然想到:

如果我打开了一个 BusyBox shell,并且 BusyBox 二进制文件本身被删除了,我还能使用 BusyBox 二进制文件中包含的所有命令吗?

显然,我无法从另一个正在运行的 shell 中使用这些命令的 BB 版本,例如bash,因为 BusyBox 文件本身将无法bash打开和运行。但是在 BusyBox 的运行实例中,在我看来,BB 可以通过两种方法运行命令:

  1. 它可以派生并执行一个新的 BusyBox 实例,使用适当的名称调用它——并从磁盘读取 BusyBox 文件来执行此操作。
  2. 它可以分叉并执行一些内部逻辑来运行指定的命令(例如,通过将其作为函数调用运行)。

如果 (1) 是 BusyBox 的工作方式,我希望在删除 BB 二进制文件后,某些 BusyBox 提供的命令在 BB 的运行实例中将变得不可用。

如果 (2) 是它的工作原理,那么 BusyBox 甚至可以用于恢复 BB 本身已被删除的系统——前提是仍然可以访问 BusyBox 的一个正在运行的实例。

这在任何地方都有记录吗?如果没有,有没有办法安全地测试它?

busybox system-recovery

29
推荐指数
2
解决办法
3885
查看次数

为什么 POSIX 要求某些 shell 内置函数具有外部实现?

有关的printf是否是这个问题,一个内置的佳日,谈到这个答案是报价POSIX标准

答案指出,POSIX 搜索顺序是查找所需命令的外部实现,然后,如果 shell 已将其实现为内置,则运行内置。(对于不是特殊内置函数的内置函数。)

为什么 POSIX 要求在允许运行内部实现之前存在外部实现?

似乎……随意,所以我很好奇。

shell posix shell-builtin

24
推荐指数
2
解决办法
1726
查看次数

pwd 和 /bin/pwd 之间的奇怪区别

我添加了一个符号链接到当前目录ln -s . aa。如果我执行cd aa,然后我执行pwd,响应是/home/sim/aa

但是如果我执行/bin/pwd它会打印/home/sim(当前目录没有改变)。

这种差异从何而来?

shell symlink pwd

17
推荐指数
2
解决办法
5682
查看次数