シェルスクリプトの動作について
質問は2 つです。シェルスクリプトを起動時にlaunchd から読んだ際にType A とType B の動作の違いは何故か。
memory_pressure コマンドを読んだ際に、再起動前のFinder のウインドウが開かなくなるのは何故か。
です。
状況ですが、
勉強がてら下記のシェルスクリプトを作りました。勉強しながら作ったので、その手の人が見るとダメダメな可能性が高いすが、どうにも不思議な動きをするので質問することとしました。
下記のシェルスクリプトはThunderbolt 接続の外付けSSD から起動したさいにVM パーティションをマウントするためのものです。
Type A
#!/bin/bash -x
set -eu
UUID=「自分のところのUUID」
mountpoint=""
tpoint="/private/var/vm"
vmSwap="vm.swapusage: total = 0.00M"
swapfile="vm.swapusage: total = 0.00M"
sleep 7
for n in $(seq 1 5)
do
if [ "$mountpoint" = "$tpoint" ] ; then
echo $((n - 1)) >> /Users/Shared/n.txt
else
set +e
diskutil mount -mountPoint /private/var/VM "$UUID"
set -e
sleep 4
mountpoint=$(diskutil info "$UUID" | grep -o "$tpoint")
echo ${mountpoint}" xx" >> /Users/Shared/n.txt
fi
done
set +e
memory_pressure -l critical 2>&1 &
set -e
sleep 7
set +e
for n in $(seq 1 61)
do
if [ "$swapfile" = "$vmSwap" ] ; then
sleep 2
swapfile=$(sysctl vm.swapusage | grep -o "$vmSwap")
else
killall -15 -e memory_pressure
exit 0
fi
done
それでType B
#!/bin/bash
UUID=「自分のところのUUID」
mountpoint=“”
mou="vate/var/vm (apfs, local, nodev, nosuid, journaled, noowners, nobrowse)"
for n in `seq 1 14`
do
if [ "$mou" = "$mountpoint" ] ; then
echo $n >> /Users/Shared/Logs/n.txt
exit
else
diskutil mount -mountPoint /private/var/vm $UUID
fi
sleep 3
mountpoint2=`mount | grep "s4 on /private/var/vm (apfs,"`
mountpoint=${mountpoint2##*pri}
done
提載状態なら、どちらも正常に動きます。
それで、
最初の質問はType A の8 行目「sleep 7」です。Mac によってはこの「7」が4 以下になると動きません。動かないのにエラーは出ません。ログによれば目的のパーティションはマウントされて終了しています。ところがログイン後、確認するとマウントされていません。
これは何故でしょうか。これが第一の質問です。
第二の質問ですが、Type A のmemory_pressure コマンドです。
何故かType A の上記のコマンドを実行するとMac を起動してログインしたさいに再起動前に開いていたウインドウが開かなくなる症状があります。私のところでは再現性は高いのですが、気まぐれに起きなくなったりします。気まぐれに直るのは良いのですが何故、起きるのでしょうか。
macOS High Sierra 10.13.4