脚本不会 运行 在 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 标准选项和语法。
- 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
- 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'
我正在尝试在 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 标准选项和语法。
- 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
- 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'