読者です 読者をやめる 読者になる 読者になる

謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

bashのスクリプトほげっと

sh

風邪引いて寝てた。
ファイルがあるかどうか2つのディレクトリを比較して、足りないファイルをコピーするシェル。

function libDiff() {
  local JARS="/path/to/local/lib/*.jar"
  local DIFFPATH=/path/to/check/dir
  local SAVEFILE=/path/to/local/copylist.sh
  local COPYPATH=/path/to/install/lib
  local FILEPATH

  rm -rf ${SAVEFILE}

  for FILEPATH in JARS
  do
    filename=`basename ${FILEPATH}`
    if [ ! -e ${DIFFPATH}/${filename} ]; then
      echo "cp -f ${FILEPATH} ${COPYPATH}/${filename}" >> ${SAVEFILE}
    fi
  done
}

書いてみると一瞬だったりする。
寝すぎて眠い。


あとよくお世話になってるのは、expect コマンド。

#!/usr/bin/expect
set timeout 5
spawn ssh john@white-azalea.net
expect "Enter passphrase for key"
send "JohnDoe\n"
expect "Last login"
send "ls -l\n"
interact

見たまま。
ダブルクォートをエスケープすれば、一応 bashスクリプトからでも読める。

#!/bin/sh
expect -c "
  set timeout 5
  spawn ssh john@white-azalea.net
  expect \"Enter passphrase for key\"
  send \"JohnDoe\n\"
  expect \"Last login\"
  send \"ls -l\n\"
  interact
"

気をつけるのは、send の際に「\n」を突っ込むこと。
これが無いと、入力を完了できない。