シェルスクリプトのexpectで応答メッセージを振り分ける方法
シェルスクリプトのexpectで確認メッセージを振り分ける方法を紹介します。
1.問題点
シェルスクリプトを使ってパスワード入力が必要なコマンド(scp)を実行するためにexpectを使っています(下記)。
#!/bin/bash
expect -c "
spawn scp /home/foo/abc.txt foo@172.16.5.10:/home/foo
expect \"Are you sure you want to continue connecting (yes/no)?\"
send \"yes\n\"
expect \"password:\"
send \"hoge\n\"
interact
"
ですが、確認メッセージが2パターンあり、それらを振り分ける方法がわかりません。
具体的には、
% scp /home/foo/abc.txt foo@172.16.5.10:/home/foo
というコマンドを実行すると、初回は、
Are you sure you want to continue connecting (yes/no)?
と聞かれて、そのあと
password:
を聞かれるのですが、2回目以降は、
password:
しか聞かれません。
ということで、シェルスクリプトのexpectで確認メッセージを振り分ける方法を紹介します。
2.シェルスクリプトのexpectで確認メッセージを振り分ける
確認メッセージを振り分けるには、次のように書き換えます。
#!/bin/bash
expect -c "
spawn scp /home/foo/abc.txt foo@172.16.5.10:/home/foo
expect {
\"Are you sure you want to continue connecting (yes/no)?\" {
send \"yes\n\"
expect \"password:\"
send \"hoge\n\"
} \"password:\" {
send \"hoge\n\"
}
}
interact
"
具体的には、expect節で全体を括り、その中にifのthen節とelse節のように確認メッセージを分けて記述します。
Adobe Acrobat Reader(Adobe Reader)で電子印鑑を押印する方法
Adobe Acrobat Reader(Adobe Reader)で電子印鑑を押印する方法を紹介します。
1.電子印鑑の用意
電子印鑑は有料・無料など色々なサイトで作ることができます。
ここでは、画像の印鑑データを透過したり、テキスト打ち込みで印鑑が作れる「印鑑透過」で作ったものを利用します。
「STORES」というサイトでも無料ダウンロードできるようです。
2.PDFに電子印鑑を押印する
印鑑を押印したいPDFファイルを開き、「すべてのツール」タブの「入力と署名」または「電子サイン」をクリック。
「イニシャルを追加」をクリック。
「画像」をクリック。
電子印鑑にしたい画像を選択すると枠内に表示されるので「適用」をクリック(ここでサイズ等の調整はできません)。
なお、この印鑑を毎回使いたい場合は画面左下の「イニシャルを保存」をチェックしておくと便利です。ここではチェックした状態で進めます。
「適用」をクリックすると、PDFに適用した電子印鑑が表示され、マウスで移動できる状態になります。
位置を決めてクリックすると印鑑が固定されます。
印鑑に編集ボックスが表示されます。「A」は印鑑の拡大・縮小、ゴミ箱は印鑑の削除です。
その右の「…」は印鑑ではないイニシャル等におきかえるものです。
これでPDFを保存すれば、電子印鑑が捺印された状態になります。
次回以降は「電子サイン」に選択した印鑑が表示されるので、印鑑をクリックするだけでPDFに表示されます。×印をクリックすれば登録を解除できます。
ansibleのインベントリに設定した変数にアクセスする方法
ansibleのインベントリに設定した変数にアクセスする方法を紹介します。
1.問題点
ansibleで下記のインベントリを作成しました。
test00 ansible_host=192.168.0.10
test01 ansible_host=192.168.0.11
[all:vars]
ansible_user=test
ansible_ssh_pass=test
[server1]
test00
[server2]
test01
[server1:vars]
hoge=1
[server2:vars]
hoge=2
このインベントリでserver1ホスト指定で実行するときに、server2の変数hoge
[server2:vars]
hoge=2
の値を参照したいのですが、方法が分かりません。
ということで、ansibleのインベントリに設定した変数にアクセスする方法を紹介します。
2.ansibleのインベントリに設定した変数にアクセスする
ansibleのインベントリに設定した変数にアクセスするには、下記のように指定します。
hostvars[groups['server1'][0]]['hoge']
例:
- name: コマンド実行
command:
cmd: echo {{ hostvars[groups['server1'][0]]['hoge'] }}
register: result
- name: "結果出力"
debug:
msg: "{{ result.stdout_lines }}"