脚本不会 运行 在 Solaris 上

Script won't run on Solaris

我正在尝试在 SunOS 5.10 Generic_120011-14 sun4v sparc SUNW 上制作以下脚本 运行,但我在调整它时遇到困难。

#!/bin/bash
DIRECTORY=
if [ $# -eq 1 ]; then
 if [ -d "$DIRECTORY" ]; then
   find "$DIRECTORY" -mindepth 1 -printf '%y %p\n' | awk '=="d"{sub(/.*\//,"&DIR: ")} {gsub(/[^\/]*\//," ")} 1'
 else
   echo "That directory doesn't exist."
   exit 1
 fi
else
 find . -mindepth 1 -printf '%y %p\n' | awk '=="d"{sub(/.*\//,"&DIR: ")} {gsub(/[^\/]*\//,"  ")} 1'
fi

命令 find 没有 -printf 也没有 -mindepth。有什么建议我应该改用什么吗?

问题不是 Solaris 特有的,问题是您使用的是 GNU 扩展,所以您的脚本不可移植,即不是 POSIX。

有两种方法可以解决这个问题,或者您需要的 GNU 实用程序已经安装在您的 Solaris 10 机器上,您只需告诉您的脚本使用它们,或者它们没有安装,您需要修改您的脚本以使用 POSIX 或至少 Solaris 标准选项和语法。

    1. GNU 工具
#!/bin/bash
PATH=$PATH:/usr/sfw/bin:/usr/local/bin:/opt/csw/bin
DIRECTORY=
if [ $# -eq 1 ]; then
 if [ -d "$DIRECTORY" ]; then
   gfind "$DIRECTORY" -mindepth 1 -printf '%y %p\n' | gawk '=="d"{sub(/.*\//,"&DIR: ")} {gsub(/[^\/]*\//," ")} 1'
 else
   echo "That directory doesn't exist."
   exit 1
 fi
else
 gfind . -mindepth 1 -printf '%y %p\n' | gawk '=="d"{sub(/.*\//,"&DIR: ")} {gsub(/[^\/]*\//,"  ")} 1'
fi
    1. Solaris 工具
#!/bin/ksh
DIRECTORY=${1:-.}
if [ ! -d "$DIRECTORY" ]; then
  echo "That directory doesn't exist."
  exit 1
fi
find "$DIRECTORY" ! -name "$DIRECTORY" -exec \
   ksh -c 'printf "%c %s\n" $(ls -dl "" | cut -c1-1) ""' sh {} \; | \
   nawk '=="d"{sub(/.*\//,"&DIR: ")} {gsub(/[^\/]*\//," ")} 1'