标签: dash

dash 或其他一些 shell 比 bash“更快”吗?

我一直认为使用 dash 而不是 bash 的唯一好处是 dash 更小,因此许多 dash 实例在启动时启动得更快。

但是我做了一些研究,发现有些人将他们所有的脚本迁移到 dash 中,希望他们能跑得更快,我也在Ubuntu Wiki 的DashAsBinSh文章中发现了这一点:

切换默认 shell 的主要原因是效率。bash 是一个优秀的全功能 shell,适合交互式使用;事实上,它仍然是默认的登录 shell。但是,与dash相比,它的启动和操作相当大且缓慢

现在,我一直在系统上使用大量 bash 脚本来处理许多事情,我的问题是我有一个特定的脚本,我 24/7 连续运行,产生大约 200 个孩子,它们一起加热我的计算机 10° C多于正常使用。

这是一个相当大的脚本,有很多 bashism,因此将它们移植到 POSIX 或其他一些 shell 将非常耗时(而且 POSIX 对个人使用并不重要),但如果我能减少其中的一些,那将是值得的CPU使用率。我知道还有其他事情需要考虑,比如调用一个外部二进制文件,比如sed一个简单的 bashism ${foo/bar},或者grep代替=~.

TL;DR与 dash 相比,bash 的启动和运行速度真的更慢吗?是否有其他 Unix shell比 bash更有效

performance bash dash

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

为什么没有人使用真正的 Bourne shell 作为 /bin/sh?

我注意到基本上我曾经使用过的系统都没有/bin/sh真正的可执行文件。它总是一个符号链接dashbash在POSIX模式,或者类似的东西。

为什么?使用真正的、原始的有/bin/sh什么缺点?(速度?许可?)

shell dash history

55
推荐指数
4
解决办法
8803
查看次数

dash、ash 和 sh 脚本是否 100% 兼容?

我想知道为 dash、ash 和 sh 编写的脚本是否 100% 兼容?

dash 或 ash 或语法更改是否有任何附加功能?

据我所知,ash 是 sh 的直系后代。

shell compatibility dash shell-script ash

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

如何在 Dash 中模拟进程替换?

在 中bash,我可以使用进程替换并将进程的输出视为保存在磁盘上的文件:

$ echo <(ls)
/dev/fd/63

$ ls -lAhF <(ls)
lr-x------ 1 root root 64 Sep 17 12:55 /dev/fd/63 -> pipe:[1652825]
Run Code Online (Sandbox Code Playgroud)

不幸的是,dash.

Process Substitution在破折号中模拟的最佳方式是什么?

我不想将输出保存为某个地方的临时文件 ( /tmp/) 然后必须删除它。有没有替代方法?

dash process-substitution

21
推荐指数
3
解决办法
2151
查看次数

为什么我的箭头键在 sh 中不起作用?

我最近安装了 Ubuntu,当我在终端上运行 sh 时,我的箭头键不起作用,所以我无法查看通话记录或编辑我正在输入的任何内容。它只是作为像^[[A .

登录外壳是bash并且它工作正常,但是一旦我切换到sh,它们就不起作用。

我怎样才能解决这个问题?

dash

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

几个与算术相关的命令,Dash、POSIX shell、sh、Increment

在 POSIX Shell 中对变量进行 pre/post 递增时,这两个示例之间有什么区别。它们看起来会产生相同的结果,但它们的使用方式会不同吗?你什么时候更喜欢一个?

X=$((X+1))

: $((X=X+1))
Run Code Online (Sandbox Code Playgroud)

shell dash shell-script posix

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

: 和 true 和有什么不一样?

bash

$ type :
: is a shell builtin
$ type true
true is a shell builtin
Run Code Online (Sandbox Code Playgroud)

看起来它们是相同的,但它们没有给出相同的系统跟踪:

$ strace :
strace: :: command not found
$ strace true
execve("/bin/true", ["true"], [/* 82 vars */]) = 0
[snip]
exit_group(0)                           = ?
Run Code Online (Sandbox Code Playgroud)

我尝试比较strace bash -c : 2>:.txtand strace bash -c true 2>true.txt,但除了内存位置之外找不到它们之间的任何差异。

dash

$ type :
: is a special shell builtin
$ type true
true is a shell builtin
Run Code Online (Sandbox Code Playgroud)

好的,所以它们不一样。help :并且 …

bash dash

16
推荐指数
3
解决办法
2068
查看次数

$PATH 环境变量中的百分比

我的 $PATH 看起来像这样:

/home/torbjorr/deployed/vector/x86_64-GNU%2fLinux:/home/torbjorr/deployed/typewriter/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mustudio/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mathext/x86_64-GNU%2fLinux:/home/torbjorr/deployed/doxymax/x86_64-GNU%2fLinux:/home/torbjorr/deployed/c2tex/x86_64-GNU%2fLinux:/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand:/home/torbjorr/deployed/x86_64-GNU%2fLinux/spellesc:/home/torbjorr/deployed/x86_64-GNU%2fLinux/projinit:/home/torbjorr/deployed/x86_64-GNU%2fLinux/herbs:/home/torbjorr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Run Code Online (Sandbox Code Playgroud)

在 bash 中,我可以毫无问题地调用位于

/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand
Run Code Online (Sandbox Code Playgroud)

喜欢

$ wand
(i) Mål från "main.cpp" har registrerats
(i) Skapar katalog "__wand_targets_dbg"
(i) Kör g++ "main.cpp" -fpic -L"/home/torbjorr/deployed"  -g -Wall -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/cb-template
Run Code Online (Sandbox Code Playgroud)

但是,在 bourne shell 兼容模式下,找不到 wand:

$ wand
sh: 2: wand: not found
Run Code Online (Sandbox Code Playgroud)

问题似乎是这些路径中的 % 符号。此符号已通过 URL 编码添加,因此名称“GNU/Linux”可以在目录名称中使用,即使它不是有效的文件名。是否可以让名称在 sh 中工作,或者使 sh 命令作为 bash 工作。也就是说,即使使用 /bin/sh 命令调用 bash 的行为也相同,该命令无论如何都指向 bash 的符号链接。

shell path dash ash

16
推荐指数
1
解决办法
1622
查看次数

POSIX shell 中函数和变量的单独命名空间

在 dash 中,函数和变量似乎位于不同的命名空间中:

fn(){
    fn="hello world"
}
fn; echo "The value is $fn!" #prints: The value is hello world!
fn; echo "The value is $fn!" #prints: The value is hello world!
#the fn variable doesn't conflict with the fn function
Run Code Online (Sandbox Code Playgroud)

这是特定于破折号的功能还是 POSIX 保证?

shell dash posix

14
推荐指数
2
解决办法
1522
查看次数

/bin/dash: 检查 $1 是否为数字

检查 $1 是否为 /bin/dash 整数的最佳方法是什么?

在 bash 中,我可以这样做:

[[ $1 =~ ^([0-9]+)$ ]]
Run Code Online (Sandbox Code Playgroud)

但这似乎不符合 POSIX 标准,而且 dash 不支持

shell dash string regular-expression

12
推荐指数
2
解决办法
3079
查看次数