私は/etc/fstab
のいくつかのエントリを読む必要があるスクリプトを書いています。私は手動で/etc/fstab
にいくつかのエントリを追加してスクリプトをテストした後、手動で元の内容にファイルを復元しました。今私はこれらのテストを自動化し、それらを別々のスクリプトとして実行したいと思います。しかし、私は、/etc/fstab
を変更するという考え方に慣れていません。私は/etc/fstab
のバックアップコピーを作成し、それを変更し、最終的にテストが完了した後に元のファイルを復元することを考えていました。私は一時的にfstab
の位置を変更することができればそれを好むだろう。/etc/fstabの場所を変更してください
はmount -a
は、スクリプト内から実行されたときに/usr/local/etc/fstab
で唯一のエントリが処理されるように/usr/local/etc/fstab
、たとえば、にfstab
の場所を変更する方法がありますか?
UPDATE:
私はLIBMOUNT_FSTAB=/usr/local/etc/fstab
を設定することにより、bishop's solutionを使用。過去にいくつかの機会にマニュアルページmount
をスキミングしましたが、私はこの変数に気付かなかったのです。私はこの変数がいつもそこにあって、それを見落としてしまったのか、ある時点で追加されたのか分からない。私はmount from util-linux 2.27.1
を使用しており、少なくともこのバージョンではLIBMOUNT_FSTAB
が利用可能であり、マニュアルページに記載されています。最後のENVIRONMENT
セクションにあります。これにより、私の自動化されたテストは将来もっと安全になります。
アップデート2:これは、適切なプログラミングの質問であるか否かの議論があったので
、私はLIBMOUNT_FSTABの使い方を示し小さなスクリプトを書くことにしました。
#!/bin/bash
libmount=libmount_fstab
tmpdir="/tmp/test_${libmount}_folder" # temporary test folder
mntdir="$tmpdir/test_${libmount}_mountfolder" # mount folder for loop device
img="$tmpdir/loop.img" # dummy image for loop device
faketab="$tmpdir/alternate_fstab" # temporary, alternative fstab
# get first free loop device
loopdev=$(losetup -f)
# verify there is a free loop device
if [[ -z "$loopdev" ]];then
echo "Error: No free loop device" >&2
exit 1
fi
# check that loop device is not managed by default /etc/fstab
if grep "^$loopdev" /etc/fstab ;then
echo "Error: $loopdev already managed by /etc/fstab" >&2
exit 1
fi
# make temp folders
mkdir -p "$tmpdir"
mkdir -p "$mntdir"
# create temporary, alternative fstab
echo "$loopdev $mntdir ext2 errors=remount-ro 0 1" > "$faketab"
# create dummy image for loop device
dd if=/dev/zero of="$img" bs=1M count=5 &>/dev/null
# setup loop device with dummy image
losetup "$loopdev" "$img" &>/dev/null
# format loop device so it can be mounted
mke2fs "$loopdev" &>/dev/null
# alter location for fstab
export LIBMOUNT_FSTAB="$faketab"
# mount loop device by using alternative fstab
mount "$loopdev" &>/dev/null
# verify loop device was successfully mounted
if mount | grep "^$loopdev" &>/dev/null;then
echo "Successfully used alternative fstab: $faketab"
else
echo "Failed to use alternative fstab: $faketab"
fi
# clean up
umount "$loopdev" &>/dev/null
losetup -d "$loopdev"
rm -rf "$tmpdir"
exit 0
私のスクリプトは、ほとんどの場合、ほとんどの場合接続されていない外部デバイスを管理します。ループデバイスを使用して、外部デバイスをシミュレートしてスクリプトの機能をテストします。これにより、複数の物理デバイスを接続/再接続する必要がないため、時間が大幅に節約されます。 fstab
の代わりに使うことができることが証明されたのは、非常に便利な機能であり、構文解析/変更がfstab
になるたびに、安全なテストシナリオをスクリプト化できることです。実際には、代替スクリプトfstab
も使用できるようにスクリプトを部分的に書き直すことにしました。ほとんどの外部デバイスはほとんどシステムに接続されていないので、対応するエントリはちょうど/etc/fstab
まで乱雑です。
SOプログラミングの質問です。 Unix.SEは、Unixの設定について質問するのに適しています。 – Barmar
それは私にそれを逆行させるように聞こえる。環境変数から場所を取るようにします(設定されていない場合は '/ etc/fstab'を使用します)。 –
AFAIK、 'mount'に' fstab'の代わりの場所を使うように指示する方法はありません。 – Barmar