简单的shell脚本在cygwin中工作,但在solaris上不起作用

时间:2011-02-20 04:09:25

标签: shell unix scripting cygwin solaris

我正在尝试将bash命令的输出存储在变量中。我是shell脚本的新手,但到目前为止,我有以下内容:

#!/bin/sh
MOSTRECENTMOD="$(echo | ls -t | head -n1)"
echo "$MOSTRECENTMOD"

这在cygwin中运行得很好,但在Solaris上却没有。有任何想法吗?我正在使用Unix换行符。我尝试了很多东西,但它似乎没有用。

在Solaris上,它只输出:

$(echo | ls -t | head -n1)

跑步时。

谢谢。

4 个答案:

答案 0 :(得分:4)

Solaris上的标准/bin/sh非常严格地说是System V Bourne Shell。它绝对不是POSIX兼容的shell,并且不理解$(...)符号(在许多其他差异中,或多或少的重要性)。这意味着继续使用/bin/sh,您需要更改$(..)表示法以使用反引号(这在内联Markdown中显示出一种痛苦 - 我尝试了各种顺序但没有成功:

`...`

或者,如果您的机器有/bin/bash,请在shebang线上指定;否则,请指定支持/bin/ksh表示法的$(...)和许多其他有用的功能。

答案 1 :(得分:2)

我认为$( ... )语法来自Bash,而非标准sh。使用反引号(`echo | ls -t | head -n1`)或将#!/bin/sh更改为#!/bin/bash(假设您的系统中存在)。

答案 2 :(得分:0)

我认为你的问题是你有太多的引号。摆脱第一行的引号,它应该可以工作。

答案 3 :(得分:0)

由于传统/向上兼容性原因,Solaris 10及更早版本的/ bin / sh不兼容POSIX。如果你想保持你的脚本不变,我建议,你需要切换到支持posix $()表示法的shell,比如/ bin / ksh,/ usr / xpg4 / bin / sh或bash。

例如:

#!/bin/xpg4/bin/sh
MOSTRECENTMOD="$(echo | ls -t | head -n1)"
echo "$MOSTRECENTMOD"

另请注意,Solaris 11(Express)具有兼容的/ bin / sh,因此不需要这样做。

相关问题