我想知道sh符号链接的意义dash是什么?我知道这dash应该比 快bash,但我不确定为什么原始sh外壳不存在于sh.
或者如果有什么原因没有sh链接到bash?

我想知道是否有办法找到 shell Dash 版本。
我尝试了几个命令,如 : dash -v, dash -V, dash --version,但没有一个有效。
Dash Shell 维基百科:http : //en.wikipedia.org/wiki/Debian_Almquist_shell
我正在两个不同的系统上运行全新的 Oneiric 安装(即不是升级),并且遇到了相同的一组看似相关的问题。
最令人沮丧的是,当我使用从 Mac OS X 随身携带的 .profile 和 .bashrc 时,通过 LightDM 登录到 X 会立即将我注销。我相信这是因为当运行“/bin/sh”时,它表现为/bin/dash,但仍然将$SHELL 变量设置为/bin/bash。
我有一个巨大的.bashrc。如果你愿意,你可以在这里看到它,但它的内容可能不相关,除了它充满了 bashism 的事实,以及它在 xterm 内或在虚拟控制台上没有错误的事实。
我的.profile样子是这样的(缩写):
case $SHELL in
*bash*)
if [ -f $HOME/.bashrc -a -r $HOME/.bashrc ]; then
. $HOME/.bashrc
fi
;;
esac
Run Code Online (Sandbox Code Playgroud)
如果我尝试通过 LightDM 登录 X,它会立即将我注销。我在.xsession-errors与我的 .bashrc 相关的错误看起来像这样(缩写):
/home/mrled/.bashrc: 103: [[: not found
[: 103: Linux: unexpected operator
[: 274: -P :: unexpected operator
/home/mrled/.bashrc: 520: complete: not found
Run Code Online (Sandbox Code Playgroud)
正如我所说,当我从虚拟控制台运行 bash 时,我没有收到这些错误。此外,如果我删除我的 …
考虑以下:
$ ksh -c '1(){ echo hi;};1'
ksh: 1: invalid function name
$ dash -c '1(){ echo hi;};1'
dash: 1: Syntax error: Bad function name
$ bash -c '1(){ echo hi;};1'
bash: `1': not a valid identifier
bash: 1: command not found
$ mksh -c '1(){ echo hi;};1'
hi
Run Code Online (Sandbox Code Playgroud)
基本上,我试图声明函数1,0这将是trueand 的简写false,但是正如您所看到的,我在函数中使用数字名称时遇到了问题。别名和两位数名称也会发生相同的行为。
问题是“为什么”?它是 POSIX 强制要求的吗?或者只是像伯恩一样的贝壳的怪癖?
在终端中,引用 home 的一种方法是使用~/. 我不明白这是如何工作的,因为输出file ~/是:
/home/admin/: directory
Run Code Online (Sandbox Code Playgroud)
并且只是运行~/结果:
-bash: /home/admin/: Is a directory
Run Code Online (Sandbox Code Playgroud)
那么转换~/成/home/admin什么?
~/似乎也适用于/bin/dash,所以我也知道它不是特定于 bash 的。
我刚刚意识到,在当前的 Ubuntu 版本中/bin/sh,不再符号链接到bash(多年来一直如此),而是改为dash。我想知道这两个 shell 之间的实际语法差异是什么,以及编写的 shell 脚本bash在dash. 有人能指出我对这两者之间差异的清晰描述吗?
根据这篇文章,dash被选为/bin/sh因为bash较慢:Dash as /bin/sh
有没有具体的数字来说明速度有多快dash?
如果使用bash而不是dash引导 Ubuntu需要多长时间?
上面链接的论点今天仍然有效吗?对于背景:system-v init 使用了很多 shell 脚本,但 systemd 没有。
这个问题与综合基准测试中的速度无关。它关乎最终用户的整体显着利益。关于 dash 与 bash 速度的综合基准测试并没有回答这个问题。
我曾经用这个命令来计算我用鼠标点击了多少次,命令是xev | grep "ButtonPress".
我的同事修改了命令,使其返回:
ButtonPress 0
ButtonPress 1
ButtonPress 2
ButtonPress 3
Run Code Online (Sandbox Code Playgroud)
等等......不幸的是,他不再能联系上,所以我无法再联系到他。
我记得参与i++和类似的事情,如何重现命令?
我不太喜欢 Linux,我有以下疑问:客户端为我提供了一个 Ubuntu 18.04.3 LTS 虚拟机,我可以通过 SSH 访问它。(我使用 MobaxTerm 作为 SSH 客户端,但这应该不是问题。)使用的 shell 是sh.
问题是在 shell 中,自动完成功能没有像我预期的那样使用Tab密钥工作。
它只是简单地放置了经典的制表符空格。
为什么?如何更改此配置?