Questions tagged «dash»

Dash shell是Almquist shell的POSIX兼容衍生物,在Debian,Ubuntu和其他Linux发行版中用作/ bin / sh

4
破折号或其他外壳比bash更快吗?
我一直认为使用破折号代替bash的唯一好处是破折号较小,因此许多破折号实例在启动时会更快地启动。 但是我进行了一些研究,发现有些人将所有脚本迁移到破折号以希望它们运行得更快,并且我也在Ubuntu Wiki的DashAsBinSh文章中找到了这一点: 切换默认Shell的主要原因是效率。bash是适合交互使用的出色的全功能外壳;实际上,它仍然是默认的登录外壳。但是,与破折号相比,它的启动和操作相当庞大且缓慢。 如今,我在系统上的许多事情上都使用了很多bash脚本,但我的问题是我有一个特定的脚本,该脚本连续24/7运行,产生了大约200个孩子,这些孩子将我的计算机加热10° C比正常使用更多。 这是一个很大的脚本,带有很多bashism,因此将它们移植到POSIX或其他shell会非常耗时(并且POSIX对于个人使用而言并不重要),但是如果我可以减少其中的一部分,那将是值得的CPU使用率。我知道还需要考虑其他事项,例如调用外部二进制文件(如或代替的sed简单bashism)。${foo/bar}grep=~ 与破折号相比,TL; DR的启动和操作真的比bash慢吗?还有其他比bash 更有效的 Unix shell 吗?
56 bash  performance  dash 


4
如何在Dash中模拟流程替代?
在中bash,我可以使用Process Substitution并将进程的输出视为已保存在磁盘上的文件: $ echo <(ls) /dev/fd/63 $ ls -lAhF <(ls) lr-x------ 1 root root 64 Sep 17 12:55 /dev/fd/63 -> pipe:[1652825] 不幸的是,中不支持Process Substitution dash。 Process Substitution用破折号模拟的最佳方法是什么? 我不想将输出另存为临时文件(/tmp/),然后将其删除。还有其他方法吗?


1
$ 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 在bash中,我可以毫无问题地调用位于 /home/torbjorr/deployed/x86_64-GNU%2fLinux/wand 喜欢 $ 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 但是,在bourne shell兼容模式下,找不到魔杖: $ wand sh: 2: wand: not found 看来问题出在这些路径中的%符号。该符号已通过URL编码添加,因此即使名称不是有效的文件名,也可以在目录名称中使用名称“ GNU / Linux”。是否可以在sh中使用该名称,或者使sh命令作为bash使用。也就是说,即使使用/ bin / sh命令调用了bash,make bash的行为也一样,该命令还是链接到bash。
16 shell  path  dash  ash 


2
:和true和有什么不一样?
在bash: $ type : : is a shell builtin $ type true true is a shell builtin 看起来它们是相同的,但是它们没有给出相同的系统跟踪: $ strace : strace: :: command not found $ strace true execve("/bin/true", ["true"], [/* 82 vars */]) = 0 [snip] exit_group(0) = ? 我尝试了diff strace bash -c : 2>:.txt和strace bash -c true …
15 bash  dash 

2
POSIX Shell中函数和变量的独立命名空间
在破折号中,函数和变量似乎位于单独的命名空间中: 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 这是破折号专用功能还是POSIX保证?
13 shell  posix  dash 


4
在/ bin / sh中的冒号上分割字符串
我的dash脚本采用形式的参数hostname:port,即: myhost:1234 而port是可选的,即: myhost 我需要将主机和端口读入单独的变量。在第一种情况下,我可以这样做: HOST=${1%%:*} PORT=${1##*:} 但这在第二种情况下不起作用,当省略了port时;echo ${1##*:}只是返回主机名,而不是一个空字符串。 在Bash中,我可以这样做: IFS=: read A B <<< asdf:111 但这不适用于dash。 能否在拆分字符串:在仪表板,而无需调用外部程序(awk,tr,等)?
9 shell  string  dash 

2
bash文件重定向到标准版本与Linux上的shell(`sh`)有何不同?
我编写了一个脚本,该脚本在运行时切换用户,并使用文件重定向到standard in来执行该脚本user-switch.sh。 #!/bin/bash whoami sudo su -l root whoami 并运行它bash给了我期望的行为 $ bash < user-switch.sh vagrant root 但是,如果我使用运行脚本,则会sh得到不同的输出 $ sh < user-switch.sh vagrant vagrant 为什么bash < user-switch.sh给出的输出不同于sh < user-switch.sh? 笔记: 发生在运行Debian Jessie的两个不同盒子上

3
Dash等效于脚本输出的自我重定向
在Bash中,您可以重定向当前正在运行的脚本的所有将来的 stdout输出。例如,使用此脚本, exec > >(logger -t my-awesome-script) echo 1 echo 2 echo 3 这将以syslog结尾: Oct 26 01:03:16 mybox my-awesome-script[72754]: 1 Oct 26 01:03:16 mybox my-awesome-script[72754]: 2 Oct 26 01:03:16 mybox my-awesome-script[72754]: 3 但这是特定于Bash的,具有重定向的裸露的exec在Dash中似乎不起作用。 Syntax error: redirection unexpected 如何在Dash中或在两个Shell中使其工作?

1
sh shell不支持$ @上的参数扩展吗?
我在AU上发布了一个问题的答案,我发现on的参数扩展$@不适用于shshell: <infile xargs -d'\n' sh -c 'echo "${@%%/*}"' _ 但它在中工作正常bash。这是sh外壳程序的预期行为吗,我如何在该处执行扩展? 此外,我知道使用-n1选项xargs我一次只能向命令传递一行,但是我对是否sh可以扩展很感兴趣$@: <infile xargs -d'\n' -n1 sh -c 'echo "${0%%/*}"' infile 包含: A1 /B1/C1 A 2/B2/C2 A3/B3/C3
8 bash  shell  dash 

2
测试变量是否包含换行符(POSIX)
我知道有些外壳接受这种测试: t() { [[ $var == *$'\n'* ]] && res=yes || res=no printf '%s ' "$res"; } var='ab cd' t var='abcd' t echo 执行时: $ bash ./script yes no 什么是POSIX(破折号)工作等效项 以下是可靠的测试方法吗? nl=' ' t() { case "$var" in *$nl* ) res=yes ;; * ) res=no ;; esac printf '%s ' …

1
为什么以存储的嵌套命令返回码退出会导致Dash和Bash中的返回码不同?
跑步 bash -c 'bash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;' 根据我的理解,这导致将结果test1打印到控制台并echo $?进行打印1,因为命令应该返回内部[b/d]ash -c返回的内容,而 dash -c 'dash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;' 结果相同,但0根据则返回echo $?。 我想了解这种差异,以便加深对Shell和可移植Shell编程的了解。 我在Ubuntu 17.10(Artful Aardvark)上使用bash4.4.12和dash0.5.8-2.3ubuntu1。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.