トップ «前の日記(2013-11-22) 最新 次の日記(2013-11-24)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2013-11-23 :-)

_ 午前

1030 起床 && 部屋掃除

1130 おひる。そば

_ 午後

1400 チネチッタ

1600 買い物

_

1700 コーヒー飲むなど

2100 飯

_ [艦これ]艦これ

E-2 クリア。

なんだかんだでこの編成が最も安定する。ボスまでノーダメージだし、ボス戦もノーダメージだった。よく分からん。

止めは北上さまの連撃。

能代です。よろしくどうぞ。

_ [NetBSD]/usr/bin/shar を読む

shar は使ったことがなかったんだが、与えられたファイルリストをテキスト 1 つにまとめ、アーカイブとするものらしい。それ tar でいいんじゃないの。

shar よりも tar のほうが後に書かれたものなのだろうかと思ったけどそうでもないらしい。

shar の man より

HISTORY
     The shar command appeared in 4.4BSD.

tar の man より

HISTORY
     A tar command first appeared in Version 7 AT&T UNIX.

4.4BSD は 1994 年 6 月リリース ( BSD - 4.4BSD と派生 )

Version 7 AT&T UNIX は 1979 年リリース ( Version 7 Unix )

ううむ。謎

shar のコードを読む。

# ヒアドキュメントにより EOF までの文字列を印字する
cat << EOF
# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
EOF

# for i in "$@" と同じ
# つまりスクリプトの引数 $1 $2 $3... をすべて処理する ( プロフェショナルシェルプログラミング p.98 )
for i
do
	echo "#	$i"
done

echo "#"

for i
do
  if [ -d $i ]; then
    echo "echo c - $i"
    echo "mkdir -p $i > /dev/null 2>&1"
  else
    echo "echo x - $i"
    echo "sed 's/^X//' >$i << 'END-of-$i'"
    sed 's/^/X/' $i
    echo "END-of-$i"
  fi
done
echo exit
echo ""

exit 0

しかし shar コマンドがどういうものかかよく分からんので実際に使ってみる。

Man page of SHAR より、shar に対して実行。

% cd /usr/src/usr.bin/shar
% shar `find . -print` | lv

こんなん出ました。出力されるものそれ自体がシェルスクリプトとなる。

# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#       .
#       ./CVS
#       ./CVS/Repository
#       ./CVS/Entries
#       ./CVS/Template
#       ./CVS/Root
#       ./CVS/Tag
#       ./obj
#       ./Makefile
#       ./shar.1
#       ./shar.sh
#
echo c - .
mkdir -p . > /dev/null 2>&1
echo c - ./CVS
mkdir -p ./CVS > /dev/null 2>&1
echo x - ./CVS/Repository
sed 's/^X//' >./CVS/Repository << 'END-of-./CVS/Repository'
Xsrc/usr.bin/shar
END-of-./CVS/Repository
echo x - ./CVS/Entries
sed 's/^X//' >./CVS/Entries << 'END-of-./CVS/Entries'
X/Makefile/1.8/Mon Mar 24 21:59:48 1997//Tnetbsd-6-0-RELEASE
X/shar.1/1.11/Thu Aug  7 11:15:51 2003//Tnetbsd-6-0-RELEASE
X/shar.sh/1.3/Thu Jun 30 02:36:35 2005//Tnetbsd-6-0-RELEASE
XD
END-of-./CVS/Entries
echo x - ./CVS/Template
sed 's/^X//' >./CVS/Template << 'END-of-./CVS/Template'
XCVS: ----------------------------------------------------------------------
XCVS: CVSROOT  cvs.NetBSD.org:/cvsroot
XCVS: please use "PR category/123" to have the commitmsg appended to PR 123
XCVS:
XCVS: Please evaluate your changes and consider the following.
XCVS: Abort checkin if you answer no.
XCVS: => For all changes:
XCVS: Do the changed files compile?
XCVS: Has the change been tested?
XCVS: => If you are not completely familiar with the changed components:
XCVS: Has the change been posted for review?
XCVS: Have you allowed enough time for feedback?
XCVS: => If the change is major:
XCVS: => If the change adds files to, or removes files from $DESTDIR:
XCVS: => If you are changing a library or kernel interface:
XCVS: Have you successfully run "./build.sh release"?
END-of-./CVS/Template
echo x - ./CVS/Root
sed 's/^X//' >./CVS/Root << 'END-of-./CVS/Root'
Xanoncvs@anoncvs.netbsd.org:/cvsroot
END-of-./CVS/Root
echo x - ./CVS/Tag
sed 's/^X//' >./CVS/Tag << 'END-of-./CVS/Tag'
XNnetbsd-6-0-RELEASE
END-of-./CVS/Tag
echo c - ./obj
mkdir -p ./obj > /dev/null 2>&1
echo x - ./Makefile
sed 's/^X//' >./Makefile << 'END-of-./Makefile'
X#      $NetBSD: Makefile,v 1.8 1997/03/24 21:59:48 christos Exp $
X#      @(#)Makefile    8.1 (Berkeley) 6/6/93
X

 :

_ [NetBSD]/usr/bin/zgrep と /usr/bin/zegrep と /usr/bin/zfgrep を読む

3 つとも中身は同じ。

% diff3 /usr/bin/zgrep /usr/bin/zfgrep /usr/bin/zegrep

スクリプト冒頭で自分がどのコマンドとして呼び出されたのか判定している。

prg=$0

# handle being called 'zegrep' or 'zfgrep'
case ${prg} in
    *zegrep)
        grep_args="-E";;
    *zfgrep)
        grep_args="-F";;
esac

正味の処理。zcat でフィルタしてから grep する

# call grep ...
if [ $# -lt 1 ]
then
    # ... on stdin
    ${zcat} -fq - | ${grep} ${grep_args} -- "${pattern}" -
else
    # ... on all files given on the command line
    if [ ${silent} -lt 1 ]; then
        grep_args="-H ${grep_args}"
    fi
    while [ $# -gt 0 ]
    do
        ${zcat} -fq -- "$1" | ${grep} --label="${1}" ${grep_args} -- "${pattern}" -
        shift
    done
fi

その zcat はここにある。

/usr/src/distrib/utils/zcat/

これはシェルスクリプトではなく C のコードである。

main() に注目する。ようするに zlib の関数を呼び出して展開 gz_uncompress() している。

int main(int argc, char *argv[])
{
  gzFile zfp;

  /* save program name and skip */
  prog = argv[0];
  argc--, argv++;

  /* ignore any switches */
  while (*argv && (**argv == '-')) {
    argc--, argv++;
  }

  if (argc == 0) {
    zfp = gzdopen(fileno(stdin), "rb");
    if (zfp == NULL)
      error("can't gzdopen stdin");
    gz_uncompress(zfp, stdout);
    return 0;
  }

  do {
    /* file_uncompress(*argv); */
    zfp = gzopen(*argv, "rb");
    if (zfp == NULL) {
      fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv);
      exit(EXIT_FAILURE);
    }
    gz_uncompress(zfp, stdout);
  } while (argv++, --argc);
  return 0; /* to avoid warning */
}

_ [NetBSD]/usr/bin/zforce を読む

圧縮ファイルに拡張子が無かったらファイル名を変更する。

while test $# -ne 0; do
        case "$1" in
                # 拡張子に .gz や .tgz などが無ければ処理する。
                *[._-]gz)
                        shift
                        ;;
                *.t[ag]z)
                        shift
                        ;;
                *)
                        # file の出力に "gzip compressed data" が含まれていれば処理する
                        if file "$1" |
                                grep -q "gzip compressed data" 2> /dev/null
                        then
                                # ファイル名の末尾に .gz を追加する
                                n="$1".gz
                                if mv "$1" "$n" 2> /dev/null; then
                                        echo "$1" -- renamed to "$n"
                                else
                                        ret=1
                                        echo $prog: cannot rename "$1" to "$n"
                                fi
                        fi
                        shift
                        ;;
        esac
done
exit $ret
本日のツッコミ(全2件) [ツッコミを入れる]
_ fallenangel (2014-02-05 19:35)

アルティメットまどかと悪魔ほむらのシルエットってさ、ridge racerシリーズのangelusまたはarchangelの天使の紋章のシルエットに似ているように見えるかい?

_ みわ (2014-02-05 22:43)

いやあ割りとよくあるシルエットなんじゃないかなあ http://www.bandainamcogames.co.jp/cs/list/ridgeracers2_psp/special/