Solusi 1:
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
halaman manual pengujian
Untuk melengkapi hal-hal, sebaliknya, jika Anda ingin memeriksa dari root apakah file atau direktori dapat dibaca untuk pengguna tertentu, Anda dapat menggunakan
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Solusi 2:
Apa yang Anda gambarkan seharusnya berfungsi dengan baik - selama Anda menggunakan jalur absolut, dan -f
("File ada dan merupakan file biasa") adalah pengujian yang ingin Anda lakukan.
Saya melihat /
tertinggal dalam apa yang Anda posting di pertanyaan Anda - Apakah Anda menguji direktori? Seharusnya -d
, atau cukup -e
("Sesuatu ada dengan nama itu - apa pun jenisnya")
Perhatikan juga bahwa kecuali sesuatu di sepanjang jalan tidak dapat dibaca test
([
) seharusnya dapat memberi tahu Anda apakah ada file yang dimiliki oleh root atau tidak (mis. [ -f /root/.ssh/known_hosts ]
mungkin akan gagal, karena direktori /root/.ssh tidak (atau setidaknya tidak boleh ) dapat dibaca oleh pengguna normal. [ -f /etc/crontab ]
harus berhasil).
Solusi 3:
Menambah jawaban lain, membedakan antara pengujian atau sudo otentikasi yang gagal dapat dilakukan dengan terlebih dahulu menjalankan sudo true
. Sebagian besar implementasi sudo yang saya tahu tidak memerlukan autentikasi ulang dalam waktu singkat.
Misalnya:
if sudo true; then
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
else
echo "SUDO AUTHENTICATION FAILED"
fi