8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linux:シェルスクリプト: ファイル xxx が消えるまで待つ

Last updated at Posted at 2015-01-09

もう出かける時間なのに、Firefox のダウンロードが終わらない。。。。
そんな場合のスクリプトです。


コマンドライン例。

:
: while_exist で「xxx.part」が消えるまで待って、それから warm_halt でシャットダウンします
:
$ while_exist xxx.part ; warm_halt
:
: 上のコマンドは返って来ません。このまま出かけましょう。
:

スクリプト。(パスの通っているディレクトリに置きます)

while_exsit.sh
# !/bin/bash
PATH=/usr/bin:/bin

file=${1:?"usage: $0 file [interval]"}
interval=${2:-60}

while [ -f "$file" ]
do
    sleep $interval
done

(※2015/01/09 追記) このスクリプトを使わない代替方法があります。詳しくはコメント欄を参照ください。

warm_halt.sh
# !/bin/bash
PATH=/usr/bin:/bin:/sbin

#
# root 以外で実行する場合、
# `sudo sync` と `sudo shutdown` は NOPASSWD で実行できる必要があります
#
[ "$LOGNAME" = "root" ] && sudo="" || sudo=sudo

$sudo sync               # 「sync は 2回」派、「sync は 4回」派の人は要調整
$sudo sync
$sudo sync
$sudo shutdown -h now

スクリプトの名前を変えたい場合は、シンボリックリンクを張るなどで対処してください。
以下は例です。

$ ln -s while_exist.sh while_exist   # 拡張子なしの名前でシンボリックリンクを張る
$ ln -s warm_halt.sh warm_halt       #             〃

参考。sudo の NOPASSWD の設定。

visudo コマンドで sudo の設定ファイル(/etc/sudoers)を開いて編集します。
/etc/sudoers は root 権限が必要なので sudo をつけます。

$ sudo visudo

: or

$ sudo EDITOR=vim visudo   # その場だけ vim を使って編集したい場合

例えば、lnznt アカウントに NOPASSWD で sudo を許可する場合、以下のような行を /etc/sudoers に追加して保存(エディタは終了)します。

lnznt       ALL=(ALL:ALL) NOPASSWD: ALL

上の書式の意味は以下ですので、セキュリティポリシなどに合わせて適宜変更してください。

  lnznt        ALL=(ALL:ALL)            NOPASSWD:     ALL

# アカウント名  ホスト=(ユーザ名:グループ名)  NOPASSWD:     コマンド名
# [誰が]       [どこで]  [誰になって]    (パスワードなしで) [何を]     する

# ※ホスト、ユーザ名、グループ名、コマンド名には ALL (全てを意味する) が指定可

もっと詳しいことは sudo(1)、sudoers(5) を参照してください。

8
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?