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

bash - Bourne shell "printf %s" 用法

我有一个简单的 debug_print shell 函数,用于帮助编写更大的 shell 脚本。一般来说,我尽量只编写与 Bourne 兼容的脚本并避免使用 Bash 主义。在这种情况下,我的 debug_print 函数的 Bash 版本可以正常工作,但我一生都无法弄清楚为什么我的 Bourne 兼容版本会失败。具体来说,我的问题在于将 %s 格式修饰符与 printf 一起使用。

我在下面包含了我的测试脚本。debug_print 函数显示一个带有标签的标题栏、其字符串或文件参数的内容,最后是一个与标题宽度相同的页脚栏。问题在于显示页脚栏并以注释“显示页脚行...”开头。下面的两条未注释的行是我认为应该起作用的,但不是。

紧随其后的是“这些都不起作用”注释下的几行注释,您可以在其中看到我在尝试找出问题时使用的一些各种测试/方差。在这些行之后是一个工作的 Bourne 版本,最后是一个工作的 Bash 版本。

我已经详细阅读了手册页,并尝试了我能想到的各种格式字符串、引用和变量使用。到目前为止,这些尝试都没有奏效。在“这些都不起作用”注释下,没有工作的命令都打印出整个字符串,而不是我相信它们应该只打印由字段宽度修饰符指定的字符数。

为了确定“Bourne 兼容性”,我在我的系统上使用 dash 作为 /bin/sh,这是 Debian 系统的典型。Dash 用于高效的脚本执行而不是交互式使用。根据手册页,它力求严格兼容 Bourne,所以我推断如果我的脚本与 dash 一起使用,那么它应该是合理的 Bourne 兼容并且没有 bash 主义。此外,我认识到此功能不是调试打印的全部/全部,并且可能有许多极端情况和可以改进的区域。我欢迎所有建议,但我对这个 printf 问题特别感兴趣。鉴于这应该是多么简单,看来我一定犯了一些愚蠢的错误,但我无法发现它。

这是我的 debug_print 测试脚本:

谢谢你的帮助。

0 投票
1 回答
178 浏览

upstart - shell脚本:`[[`没有按预期工作

我有一个脚本:

为什么我的条件

不行 ?

如果我删除

然后一切都很好。

我尝试删除&符号(&),尝试其他条件(如您在示例中看到的那样),尝试 if 而不是 [[ - 但一切都是徒劳的。

任何条件都不行

0 投票
2 回答
1676 浏览

linux - Shell脚本以仅包含冒号的行结尾?

我正在研究当前 Debian 7.4.0 wheezy 版本中 /etc/init.d/ 中的 System V 初始化脚本(但它也存在于其他以前的版本中)。在该文件夹中找到的几乎所有(来自现有服务)都以一个空行结尾,基本上只包含一个冒号 (:) 符号。甚至可以在那里找到用于编写您自己的初始化脚本的“骨架”模板文件也有这个。这是代码末尾的复制/粘贴:

(那是case语句的结尾,然后是文件的结尾)

还有一点有意思的是没有exit 0或者exit $?调用,除非仅在 case 语句中的某些情况下,否则会调用它,所以看起来冒号似乎是它的一种替代品?完整的骨架文件代码在这里:https ://gist.github.com/ivankovacevic/9917139

那个冒号可能是什么,为什么?

0 投票
2 回答
283 浏览

command-line - 在终端中,“cd /”和“cd ~”有什么区别?

我不明白这两者之间的区别。他们似乎都把我带到了根目录。有区别吗?

0 投票
4 回答
5025 浏览

bash - 如何识别脚本中是否使用了 bash 或 dash?

我正在编写一个 bash 脚本,在 Ubuntu 中使用“sh”命令时会引发错误(它似乎与 dash 不兼容,我正在学习这个主题)。所以我想检测是否使用 dash 而不是 bash 来引发错误。

如何在脚本上下文中检测到它?甚至可能吗?

0 投票
3 回答
317 浏览

dash-shell - 如何在破折号中标记字符串

我从格式为 的字符串中读取数据firstfield|secondfield|thirdfield,在 bash 中,我使用此构造来实现此目的:

是否可以在不使用 awk/sed 等外部​​程序的情况下以破折号获得 $FIRST、$SECOND 和 $THIRD?

0 投票
3 回答
5882 浏览

bash - 如何更改 shell / bash 脚本中的 argv[0] 值?

set命令可用于更改位置参数的值 $1 $2 ...

但是,有没有办法改变 $0 ?

0 投票
2 回答
470 浏览

regex - 在没有 Bashisms 的情况下检查 Shell 中的子字符串

我正在尝试编写一个 shell 脚本,在其中我必须在字符串中查找-32的存在。不幸的是,我必须在不使用任何 bashism 的情况下这样做,因为它必须在运行 Dash 的计算机上运行。

我试过case ${1+"$@"} in *-32*);;了,但这会得到 -321 之类的东西。有没有办法使用正则表达式或其他东西来寻找那个标志?它周围可以有其他标志,由字符串中的空格分隔。

我认为我需要的正则表达式查找 -32 后面有空格或行尾。-32(\s|$)

我对正则表达式很陌生,所以我不确定这是否是最好的方法。任何帮助,将不胜感激!

谢谢!

0 投票
1 回答
206 浏览

shell - 用破折号列出当前定义的函数?

我想列出当前定义的函数dash。有没有办法做到这一点?

我能想到的最接近的是type可以用来测试一个函数是否存在,但除此之外我很难过。

PS我在这里谈论dash(不是bashzsh)。

0 投票
3 回答
992 浏览

linux - 如何在破折号中检查root

bash 的标准解决方案,请参见:

https://askubuntu.com/questions/15853/how-can-a-script-check-if-its-being-run-as-root

这是:

在 dash 中不起作用,它正在慢慢成为 Linux 下的标准 shell。以上内容如何移植到dash?