相关疑难解决方法(0)

使用 shell 检测初始化系统

这可能与检测操作系统有关,但我特别需要系统上当前使用的 init 系统。

Fedora 15 和 Ubuntu 现在使用 systemd,Ubuntu 过去使用 Upstart(很长时间默认直到 15.04),而其他人使用 System V 的变体。

我有一个应用程序,我正在编写它作为跨平台守护程序。初始化脚本是根据可以在配置时传入的参数动态生成的。

我想做的只是为他们正在使用的特定初始化系统生成脚本。这样,安装脚本可以在没有参数的情况下以 root 身份合理运行,并且守护进程可以自动“安装”。

这是我想出的:

  • 在 /bin 中搜索 systemd、upstart 等
  • 将 /proc/1/comm 与 systemd、upstart 等进行比较
  • 询问用户

这样做的最佳跨/平台方式是什么?

有点相关,我可以依赖 bash 来支持大多数 *nix 还是依赖于发行版/操作系统?

目标平台:

  • 苹果系统
  • Linux(所有发行版)
  • BSD(所有版本)
  • Solaris、Minix 和其他 *nix

shell-script init portability

103
推荐指数
6
解决办法
5万
查看次数

如何测试 shell 脚本的 POSIX 合规性?

考虑到 POSIX 是所有 unices 中最接近通用标准的东西,我很想知道是否有专门支持它的 shell。尽管大多数现代 shell 都提供对 POSIX 的支持(并且可以毫无问题地运行 POSIX 兼容脚本),但它们在指出不兼容的功能方面做得不好。

是否有任何仅实现 POSIX 和 POSIX 的外壳程序,它会为任何不兼容的功能抛出错误?

编辑我想澄清一下,我不是要求编写可移植 shell 脚本的一般提示。评论中提到的相关问题已经涵盖了这一点。当我发现bash有一个--posix选项时,我想到了这个问题,但只是发现它只影响一些初始化行为,这并不是我正在寻找的。

shell shell-script posix

92
推荐指数
3
解决办法
4万
查看次数

避免 shell 脚本中的“BASH 主义”

是否存在类似于Perl::Critic的工具来检查您的 shell 脚本并指出缺陷、可移植性问题、使用非标准程序而没有回退、折旧的程序使用等?

我意识到这set -o posix将禁用非 POSIX 使用,但这不会告诉我我想知道的事情,例如 zsh 索引 shell 数组从 1 开始,bash 从 0 开始,而 ash 根本不支持数组。

shell bash zsh ash

37
推荐指数
1
解决办法
2453
查看次数

如何检查文件的组权限

我想从 bash 脚本检查文件的组权限。具体来说,我需要检查文件是否具有组可写位。

就是这样。就那么简单。然而:

  1. 我也需要它是便携的。
  2. test -w <file 不会告诉我它是否是组可写的。
  3. 的输出ls -ld对人类很好,但对脚本不太确定。从技术上讲,我可以解析输出,例如drwxrwxr-x提取组位,但这似乎很脆弱。
  4. statOS X 和其他系统之间的接口完全不兼容。
  5. find <file> -perm ... 不可能是答案?

ls bash permissions stat

13
推荐指数
2
解决办法
1万
查看次数

检测(从脚本)是否安装了软件的最佳方法是什么?

之前我一直对which不同平台(Linux 与 Solaris vx. OS X)的命令输出差异感到沮丧,不同的 shell 也可能会影响到这个问题。 type已被建议作为更好的替代方案,但它的便携性如何?

过去,我编写了一些函数来解析which我遇到的不同用例的输出并处理它们。它们可以在我使用的机器上工作,因此对于我的个人脚本来说还可以,但是对于我要发布给其他人使用的软件来说,这似乎非常不可靠。

举一个可能的例子,假设我必须从脚本中检测 bash 和 zsh 在一台机器上是否可用,然后使用 zsh 运行命令(如果存在),如果 zsh 不存在并且 bash 足够,则使用 bash版本没有特定的错误。脚本的其余大部分可能是 Bourne shell 或 Ruby 或其他任何东西,但是必须使用 zsh 或最新版本的 bash 完成这一特定的事情(AFAIK)。

我可以指望type跨平台可用吗?是否有其他替代方案which可以轻松且一致地回答是否安装了特定软件的问题?

(如果你还想给出与我给出的例子特别相关的想法,那很好,但我主要只是询问一般情况:找出特定机器上是否安装了特定东西的最可靠方法是什么? ?)

bash zsh standard which

9
推荐指数
1
解决办法
1963
查看次数

我在哪里可以找到如何编写尽可能可移植的 shell 脚本?

可能的重复:
可移植 shell 编程的资源

我想编写一个用于进一步分发的 shell 脚本。所以我想以尽可能可移植的方式编写它;我的意思是它不应该依赖任何仅在qzdfsh我碰巧安装在我自己的机器上的特定风格中可用的花哨的东西。该脚本不会很复杂(它必须做的最糟糕的事情是去除文件扩展名和程序的测试返回)。

我在哪里可以找到(几乎)所有 shell 都支持哪些内容?

(我特别意识到/bin/sh通常与“其他东西”符号相关的事实,因此简单地测试它是否适用/bin/sh似乎是一种可疑的策略。)

documentation shell-script

6
推荐指数
1
解决办法
159
查看次数

是否可以模拟旧版本的 Bash?

是否可以效仿(这是正确的词吗?)以前版本的 Bash?

我使用的是 4.3.11,我很想知道我的脚本是否与某些早期版本兼容,但我不想实际安装早期版本。我可以翻阅更改日志并找出我正在使用的以前版本缺少的功能,但这似乎有点乏味。我希望有某种神奇的命令行选项或脚本命令(可能是一厢情愿)。

bash testing

5
推荐指数
2
解决办法
1505
查看次数

标签 统计

bash ×4

shell-script ×3

shell ×2

zsh ×2

ash ×1

documentation ×1

init ×1

ls ×1

permissions ×1

portability ×1

posix ×1

standard ×1

stat ×1

testing ×1

which ×1