问题标签 [dash-shell]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1484 浏览

shell - 如何找到以破折号为来源的脚本的路径?

我试图让一个源 shell 脚本确定它自己的位置,我发现这对于 dash 来说是一项艰巨的任务。

在 bash、sh 和 csh 中,我可以使用:$_.

在鱼中,我可以使用(status -f).

在短跑中,我没有运气......

我已尝试使用以下结果获取下面显示的 path.sh 文件:

dash -c ". path.sh"

输出:

如何在破折号中获取 path.sh 的路径?

0 投票
1 回答
172 浏览

bash - 运行 echo 并使用 dash shell 将其重定向到 cat

我想要使​​用 python 代码创建一个压缩文件。但是,当我在 Makefile 中运行它时,它使用默认的 shell(破折号)。是个

但是在 bash 中它运行得非常好

有没有什么方法可以表达cat <(echo '#!/usr/bin/env python') - in dash ?

我知道我可以添加到 Makefile

但这只是解决方法,而不是永久解决方案。

0 投票
2 回答
3324 浏览

bash - 使用命令 `echo -ne "hello\n"` 的 Bash 与 Dash 行为

echo -ne "hello\n"使用 bash 和破折号的相同命令,我得到了不同的行为。见下文 :

这是为什么 ?完全看不懂……</p>

我的系统:

0 投票
3 回答
722 浏览

linux - Bash 和 Dash 不一致地使用 `errexit` 检查命令替换错误代码

我似乎遇到了一个非常非常奇怪的不一致方式,dash并使用该选项bash检查错误情况。errexit

使用dashbash 使用set -e/set -o errexit选项,以下程序:

将打印以下内容(对于 的错误字符串略有不同dash):

使用errexit选项,它将打印以下内容:

然而,令人惊讶的是,如果barlocal,程序将始终echo同时具有prepost。更具体地说,同时使用dashbash 不使用我们errexit选项,以下程序:

将打印以下内容:

换句话说,似乎没有检查分配给局部变量的命令替换的返回值errexit,但如果变量是全局的,则检查。

如果两个外壳都没有发生这种情况,我会倾向于认为这只是一个极端情况下的错误。由于dash专门设计为符合 POSIX 标准,我想知道这种行为是否实际上是由 POSIX 标准指定的,尽管我很难想象这将如何有意义。

dash(1)有这个要说的errexit

如果不是交互式的,如果任何未经测试的命令失败,则立即退出。如果命令用于控制ifelifwhileuntil; ,则认为命令的退出状态是经过显式测试的。或者如果命令是“&&”或“||”的左侧操作数 操作员。

bash(1)有点冗长,但我很难理解它:

如果 a pipeline(可能由单个simple command)、 alist或 a compound command(见SHELL GRAMMAR上文)以非零状态退出,则立即退出。while如果失败的命令是紧跟在oruntil关键字之后的命令列表的一部分、在ifor保留字之后的测试的一部分、在or列表elif中执行的任何命令的一部分(除了最后or之后的命令),则 shell 不会退出管道中的命令但最后一个,或者如果命令的返回值与. 如果子 shell 以外的复合命令由于命令在被忽略时失败而返回非零状态,则 shell 不会退出。一个陷阱&&||&&||!-eERR,如果设置,则在 shell 退出之前执行。此选项分别适用于 shell 环境和每个子 shell 环境(见COMMAND EXECUTION ENVIRONMENT上文),并可能导致子 shell 在执行子 shell 中的所有命令之前退出。

如果复合命令或 shell 函数在-e被忽略的上下文中执行,则在复合命令或函数体中执行的任何命令都不会受到-e设置的影响,即使-e设置了并且命令返回失败状态。如果复合命令或 shell 函数在被忽略-e的上下文中执行时-e设置,则在复合命令或包含函数调用的命令完成之前,该设置将不起作用。

0 投票
1 回答
11154 浏览

linux - 从 tcsh 更改为 bash?

我在使用一些 shell 命令时遇到了困难,并认为这是由于我的 shell 设置为 BASH 失败所致。

以下命令解决了我的问题:

或者只需键入

因此,我似乎需要将我的 shell 重新配置为 bash,这应该很简单。我的默认 $SHELL 变量是 /bin/bash

我认为这是由于我的终端首选项下的以下设置:

为什么要将我的 shell 首选项设置为此,tcsh 相对于 bash 的优势/用途是什么?

另外,我应该如何克服这个问题,同时仍然保留使用可能依赖于此默认终端首选项 (/bin/tcsh) 的任何功能

这是我的一些系统信息:

我之前使用以下命令从 DASH 更改为 BASH:

我以前也使用过以下命令:

0 投票
1 回答
484 浏览

dash-shell - 如何使用破折号从 sqlite 数据库中读取?

在 bash 中,我使用它从 sqlite 数据库中读取:

不幸的是,这不适用于破折号 - 有没有办法?

0 投票
1 回答
38 浏览

bash - 当WORD是变量时,为什么在`case WORD in`语句中不会出现WORD的字段拆分?

外壳脚本:

执行此bash操作会导致以下输出和错误。

执行此操作dash

我不明白为什么第一个case语句成功但第二个语句没有。

根据http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_05上的 POSIX 文档,在任何一种情况下都会发生字段拆分,因此 after在第一个语句$a中扩展为,它应该是等效的到第二个。foo barcase

所以两者都应该失败。为什么第一个case语句成功?

0 投票
1 回答
49 浏览

bash - 允许 shell 脚本只修改包含目录

我正在编写一个 posix 恭维 shell 脚本,除其他外,它将克隆一个 git 存储库,然后在存储库中执行一个脚本(与存储库一起克隆)。

例如:

git clone git@github.com:torvalds/linux.git
cd linux
./Kconfig

这个想法是人们会用它来做好事,而不是做坏事,但你知道......所以我真的想阻止人们做这样的事情:

rm -rf /

剧本里面。
或者也许是稍微不那么邪恶的东西,比如:

rm -rf ../../

我是否可以以某种方式更改脚本的权限(在克隆之后),以便它只能修改克隆存储库中的内容?

0 投票
3 回答
12526 浏览

arrays - 符合 POSIX 的 shell 中的数组

根据hyperpolyglot.org 上的这个参考表,可以使用以下语法来设置数组。

但是我收到一个错误,破折号是 Ubuntu 上的默认设置/bin/sh,应该符合 POSIX。

参考表是否具有误导性或错误性?
如果是,那么定义数组或列表并符合 POSIX 的正确方法是什么?

0 投票
0 回答
273 浏览

bash - LD_PRELOAD 不适用于通过 DASH 中的 system() 给出的命令,但使用 BASH

我正在使用 LD_PRELOAD,并且在使用 system() 命令时看到了 bash 和 dash 之间的区别。

让我们考虑这个简单的 C 程序:

我会像这样开始我的测试程序:

在 bash 和 dash 中,我得到了:

到目前为止一切都很好,除了当 dash 是 shell 时 LD_PRELOAD 不应用于给系统的命令。我是说

  • 如果 /bin/sh 指向 /bin/bash,则 LD_PRELOAD 应用于给 system() 的命令
  • 如果 /bin/sh 指向 /bin/dash,则 LD_PRELOAD 不会应用于给 system() 的命令。

我的 preload.so 库覆盖 open()。它在使用 bash 时与测试程序一起执行(/bin/sh=/bin/bash),但在使用 dash 时不执行(/bin/sh=/bin/dash)。

我猜 bash 和 dash 可能会以不同的方式处理传递给 execve 的环境变量,但我找不到用 dash 将 LD_PRELOAD 应用于给系统的命令的方法......不幸的是,我必须使用 dash,而使用 bash 是不是一个选择。