如何在我的 ubuntu 16.04 LTS 工作站上模拟远程主机 shell 环境

如何在我的 ubuntu 16.04 LTS 工作站上模拟远程主机 shell 环境

在我的桌面 ubuntu 主机上,如果我运行一个只包含以下行的脚本

echo $SHELL

它打印

/bin/bash

但是在运行 busybox 的另一台主机上,如果我执行同样的事情,我会得到

/bin/sh

打印

而且我注意到,如果我在我的 ubuntu 机器上创建脚本并在 busybox 主机上运行它们,那么有时我会得到不同的行为。

我想做的是在我的 ubuntu 桌面上创建一个快捷方式,指向某个终端会话,该会话将运行 Bourne Shell /bin/sh,而不是 Bourne Again Shell bash。这可能吗,还是我的想法错了?

答案1

首先,你应该阅读POSIX不同的 shell 实现。然后,如果您需要可移植性,请尝试编写尽可能符合 POSIX 标准的脚本。


为了测试你的脚本是否能与 busybox 配合使用,你可以安装并运行busybox 默认 shell ash检查脚本语法是否适用于 busybox:

sudo apt install ash
ash
# non-posix function declaration (works in bash, but not in ash)
$ function test(){ echo Hello World; }
ash: 1: Syntax error: "(" unexpected
# posix-compliant function declaration (works in ash and bash)
$ test(){ echo Hello World; }
$ test
Hello World

但这可能还不够,因为它仍将使用默认工具的 GNU 版本并具有您安装的所有其他程序,这些程序可能未与您的 busybox 一起安装。

ash
$ grep --version
grep (GNU grep) 2.25

如果你有码头工人,您可以运行busybox容器仅使用其默认工具:

docker run -it --rm busybox
$ grep --version
grep: unrecognized option `--version'
BusyBox v1.29.3 (2018-10-01 22:37:18 UTC) multi-call binary.

相关内容