2016-04-20 157 views
0

我試圖讓以下腳本在SunOS 5.10 Generic_120011-14 sun4v sparc SUNW上運行,但我在調整時遇到困難。腳本無法在Solaris上運行

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

命令find沒有-printf也不會有-mindepth。任何建議我應該用什麼來代替?

+0

此腳本在其他操作系統上運行,還是這是一個solaris特定問題? –

+1

看看'/ usr/xpg4/bin/find'是否支持'printf'。我再也無法訪問Solaris了,所以我無法檢查。如果不是,你已經用'awk'後處理輸出,所以你可以在'awk'一邊構建更多的格式,而不是依靠'%y%p \ n'。祝你好運。 – shellter

+0

@shellter同樣,我得到了'/ usr/xpg4/bin/find:壞選項-printf'和'bad option -mindepth' – aprilduck

回答

3

問題不在於Solaris,問題在於您使用的是GNU擴展,因此您的腳本不可移植,即不是POSIX。

有兩種方法可以解決這個問題,您需要的GNU實用程序已經安裝在您的Solaris 10計算機上,並且您只需告訴您的腳本使用它們,或者它們未安裝並且需要修改您的腳本使用POSIX或至少Solaris標準選項和語法。

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