问题标签 [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 投票
9 回答
6223 浏览

dash-shell - Shell 脚本输入重定向异常

谁能解释这种行为?跑步:

没有任何输出,而:

产生预期的输出:

管道不应该一步完成重定向到 test.file 在第二个示例中所做的事情吗?我对 dash 和 bash shell 都尝试了相同的代码,并从它们中得到了相同的行为。

0 投票
5 回答
41399 浏览

bash - bash、破折号和字符串比较

我正在尝试在一个简单的 shell 脚本中比较两个字符串。我使用的是/bin/shinstead of /bin/bash,经过无数小时的调试,结果 sh (实际上是破折号)无法处理这段代码:

使用 比较字符串的可移植方法是什么/bin/sh?我知道我总是可以通过使用 != 来做相反的事情,但我想知道一种更清洁、更便携的方式。

0 投票
2 回答
4448 浏览

linux - How to find PID of an dash-exec command

NOTE: I thought I was using bash, but /bin/sh is linked to /bin/dash, which has this weird exec problem.

I have a simple bash shell script on Linux which is used to launch a server process (which I did not write or control) and would like to have the bash shell script output the launched process's PID to a pidfile.

The problem is that bash-exec command does not replace its own process with the launched server process!

So:

This does not work because the pid in the file will be that of bash not the server process. And if the server process exits bash may not exit leaving the stupid launch script hanging out in the process list.

Does anyone know a way to use bash (or dash maybe?) so that:

  1. Is it possible?
  2. The launched-server server process's PID will be in my pidfile?
  3. Ensure that the bash script will die when the launched-server exists and not leave defunct shell processes hanging out in the process list?

Edit: This snippet from the bash reference manual be of use...

If command is supplied, it replaces the shell without creating a new process. If the -l option is supplied, the shell places a dash at the beginning of the zeroth argument passed to command. This is what the login program does. The -c option causes command to be executed with an empty environment. If -a is supplied, the shell passes name as the zeroth argument to command. If no command is specified, redirections may be used to affect the current shell environment. If there are no redirection errors, the return status is zero; otherwise the return status is non-zero.


Edit 2: This is the script (sanitized):

And some ps output to maybe be more clear?

0 投票
0 回答
830 浏览

shell - 在破折号不区分大小写中设置文件名制表符完成

我正在使用破折号外壳文件名制表符完成功能来完成文件名。但是破折号区分大小写的默认制表符完成。如何强制文件名制表符完成在破折号不区分大小写?

在 bash 中,我可以将“set completion-ignore-case on”添加到 /etc/inputrc,但是它在 dash 中没有任何影响。有什么建议么?

0 投票
1 回答
743 浏览

bash - 双重重定向测试

这会打印你的外壳是什么?

我希望它评估为echo foo | baror foo < <(bar),这两者都会导致错误消息。

在 Bash 4.1.5 中,管道似乎被简单地丢弃了:

在破折号:

0 投票
2 回答
9049 浏览

bash - 如何将脚本从 bash 迁移到 dash?

我想避免在每个新的 Debian 6 安装上安装 bash。所以我需要将我所有的 bash 脚本转换为破折号。
- 你会怎么做?
- 这两种语言有什么区别?
- 你知道任何警告和陷阱吗?
- 是否可以自动化该任务?

0 投票
1 回答
461 浏览

ubuntu - 如何使用带有`sh -c`的重定向创建非ascii文件?

相同的命令:echo 1 > filename创建不同的文件名:

с字符在哪里U+0441-西里尔小写字母 ES。很明显,sh吃掉了utf-8编码中的第二个字节。

$LANG在这两种情况下是:

sh链接到dash我的系统:

stty iutf8已设置。

是否有任何设置dash不允许破坏多字节字符?

我在手册中没有看到任何关于字符编码的提及:

更新

utf-8 编码中字符的第二个字节在 C 中是 '\201'有符号字符(或无符号字符)。'с'-127129

在源代码 ( apt-get source dash) 中-127搜索结果:

搜索CTLESC导致rmescapes()以下片段的宏src/expand.c:expandarg()

TODOXXX暗示更新的版本可能会有所帮助。debian/dash.README.source指着:

有两个分支:

debian-sid转义字节被删除。在release+patches 分支上grep找到丢失的字节。

git diff debian-sid...release+patches显示rmescapes()已删除release-patches

目前尚不清楚这些更改是否会包含在dash 0.5.6.1Ubuntu 中。

目前唯一的方法是发出命令:

工作是重新配置shbash

还有其他选择吗?

0 投票
4 回答
33474 浏览

linux - linux shell脚本中for循环的语法

我在实现 for 循环时遇到问题。执行脚本时出现此错误

test1.sh:2:语法错误:循环变量错误

我不明白这个错误。

这是我的脚本

谁能告诉我 ubuntu 中 sh 中 for 循环的语法(在 ubuntu 中它链接到 dash shell)shell?

0 投票
2 回答
5079 浏览

linux - 在 Linux 和 BSD 中使用和不使用 shebang 执行 Bash 脚本

当类似 Bash 的脚本在没有 shebang 的情况下作为二进制文件执行时,如何以及由谁来确定执行什么?

我猜想用shebang运行普通脚本是用binfmt_script Linux 模块处理的,该模块检查 shebang,解析命令行并运行指定的脚本解释器。

但是当有人在没有 shebang 的情况下运行脚本时会发生什么?我测试了直接execv方法,发现那里没有内核魔法 - 即这样的文件:

运行仅执行调用的已编译 C 程序会execv产生:

但是,如果我从另一个 shell 脚本执行相同的操作,它会使用与原始脚本相同的 shell 解释器运行目标脚本:

如果我对其他 shell 执行相同的技巧(例如,Debian 的默认sh- /bin/dash),它也可以:

奇怪的是,它与 zsh 并没有像预期的那样工作,并且不遵循一般方案。看起来 zsh/bin/sh毕竟是在这些文件上执行的:

请注意,ZSH_VERSION在父脚本中有效,而ZSH_VERSION在子脚本中没有!

shell(Bash,dash)如何确定没有shebang时执行的内容?我试图在 Bash/dash 源中挖掘那个地方,但是,唉,看起来我有点迷失在那里。任何人都可以阐明确定没有shebang的目标文件应该作为脚本还是作为Bash / dash中的二进制文件执行的魔法?或者可能与内核/ libc某种交互,然后我欢迎解释它如何在 Linux 和 FreeBSD 内核/ libcs​​ 中工作?

0 投票
1 回答
2986 浏览

posix - POSIX sh 重定向

我可能遗漏了一些小东西,但是否有可能以符合 POSIX(破折号)的方式实现此语法:

我知道你不能使用>&但必须使用2>&1但我不想这样做。我有大量数据进入标准输出,我不想解析它来获取我的标准错误。我觉得我错过了一些非常简单的东西,但我不能指望它......

现在,当我运行上述命令时,我只得到了几行 stdout (3),但它显​​示在 stderr 文件中并且 stdout 为空。我也尝试了各种分组方式,但我仍然没有运气。不知道发生了什么...

更新

这是我正在运行的实际命令的格式,以便您可以看到我正在尝试完成的全部效果:

这就是我提到我用 () 尝试了多种分组变体的地方。此外,可执行文件myApp不会分叉。

我认为这个命令会起作用,但我发现不是这样: