问题标签 [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.
shell - 如何将命令参数中的引号转义到 sh -c?
shell 命令 cmd 可能有空格和单引号和双引号。
如何转义这些引号以正确地将命令传递给 POSIX shell:
>dash -c '
命令'
另一个问题指向一个重复,询问双引号。那里的答案之一可能会起作用 - 拆分命令并使用连接引号。例如,如果 cmd 是
然后我们将其转换为
这很混乱......没有更简单的方法吗?
补充:似乎没有人理解我......我只想要一个通用程序,一个算法,它接受输入,一个字符串(完全准确,由 ASCII 表中从 0 到 127 的可打印 ASCII 字符组成),并输出第二个字符串。要求是如果第一个字符串是这样执行的
结果与
我现在更清楚了,请告诉我。
bash - 回归:导出的 Bash 函数在经过另一个进程后丢失
从 Ubuntu 14.04 迁移到 16.04 时,我注意到我的几个 Bash 脚本由于缺少导出的函数而失败。我想知道这是否与Shellshock 错误的修复有关,即使我只是export -f
函数,而不依赖 Bash 内部函数表示。失败不会发生在直接的 Bash 子外壳中,只有在中间有另一个进程时才会发生。例如,Bash 调用 awk / Perl / Vim 调用另一个 Bash。下面是一个 Perl 的例子:
好的
坏的
我做错了什么,还是这是一个错误?
编辑:@chepner 指出 Bash 使用特殊命名的 shell 标识符来存储函数。当通过dash
(0.5.8-2.1ubuntu2,使用 0.5.7-4ubuntu1)时,这些标识符被删除。与ksh
,他们保持活力。我检查过
同样,Vim 的行为可以通过:set shell=/bin/bash
/:set shell=/bin/ksh
所以,是dash
罪魁祸首吗?!
bash - bash:无法在同一行中设置和使用别名
我希望第二行说foo
而不是command not found
:
为什么第二行不说foo
?使用以下 shell 进行测试,行为相同:
- 重击 3.2.5
- zsh 5.0.8
- 破折号 0.5.9
- 忙箱 1.25.0
linux - 破折号,文件路径是否有任何限制
我有一个可执行文件放置在我的 Linux 机器上,因此可执行文件的路径长度为 107 个字符。我使用 command 找到了字符数echo -n "/path/to/the/executable" | wc -c -m
。当我尝试使用完整路径执行可执行文件时,出现以下错误:
sh: 1: /subpath/to/the/executable: not found
我检查了长度,/subpath/to/the/executable
它是 81 个字符。如果我放置我的可执行文件,使其路径长度小于 81 个字符,我不会得到上面的sh error
.
我做了一些搜索,发现 Linux env 上的文件路径限制为 255 个字符。我找不到 dash 或 shell 是否对文件路径有任何限制。在我的机器上,/bin/sh 是指向 /bin/dash 的符号链接。
有人可以解释破折号强制执行的文件路径上 81 个字符的限制吗?有没有办法提高限额?
shell - 为什么破折号语法不接受带有非空换行符语法符号的循环 - 这是一个破折号错误吗?
在dash
外壳下,我看到了
POSIX shell 语法在
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10_02
有
for_clause :
(...)
| For name linebreak in
(...)
所以linebreak
不必为空,但可以是换行符。那为什么我会看到这个错误?这是一个dash
错误吗?
bash
确实接受这个例子,但显然这个例子与任何“bash-ism”无关,它只是基本的 POSIX shell 语法,对dash
和bash
.
bash - “bash -c”与“破折号 -c”
dash -c
行为不同于bash -c
:
这种差异有解释吗?
linux - Bash / Dash:在“If then else”语句中的“fi”上杀死进程?
我有以下脚本,它从我的 mysql 数据库中创建 SQL 转储。然后由 git 对文件进行历史记录。在这个脚本中,我遇到了一个奇怪的行为,即使经过一些研究,我也无法回答。
如果我运行脚本,我会收到一条错误消息,指出在第 25 行(即“fi”语句)中,进程“/usr/bin/git commit -m”$NOW”被终止:
在调试时,我注释掉了检查 git 是否存在的 if-then-else 语句,并且 scipts 运行时没有错误。
我的问题是:为什么在“fi”语句中破折号“终止” git 命令?实际上提交是执行的,所以我想知道错误消息的原因可能是什么。该脚本在 Raspbian Jessie 的 dash 上运行。
提前致谢!
约尔格
脚本:/opt/mysql_backup.sh
使用“set -x”运行的输出:
dash-shell - 有没有一种简洁的方法来替换函数的返回值?
我正在为dash
我继承的 shell 脚本整理一些单元测试,并且考虑到我们要添加的大量测试,我想让它们尽可能简洁。
为此,我添加了一个check
辅助函数来处理测试的通过或失败。它基本上接收$?
来自上一个命令的返回码,并基于此通过或失败测试。这使我可以简单地实现一个单行测试(其中有很多):
现在这是相当不错的,因为它将每个测试都简化为一行,但是,在我对完美的强迫症追求中,我想知道是否还有更多的减少空间。
我知道,像 一样bash
,可以运行命令并在另一个命令中使用其输出,如下所示:
但我想知道是否有办法用命令的返回码进行同样的替换。
这意味着我的测试线将能够$?
删除令人讨厌的重复,从:
类似于:
$[]
神话中的“使用返回码”替换运算符在哪里。
dash
有这个设施还是有比我目前所做的更简洁的方法?
请记住,这里不能选择其他 shell,这是一个嵌入式系统,它dash
是唯一提供的 shell。