Działa w moim systemie. Jakie są objawy ? Czy na pewno chcesz użyć opcji -f, a nie -e?
b0fh
Odpowiedzi:
11
To, co opisujesz, powinno działać dobrze - o ile korzystasz ze ścieżek bezwzględnych, a -f(„Plik istnieje i jest zwykłym plikiem”) jest tak naprawdę testem, który chcesz wykonać.
Widzę ślad /w tym, co napisałeś w swoim pytaniu - Czy testujesz katalog? To powinno być -dlub po prostu -e(„Coś istnieje z tą nazwą - niezależnie od typu”)
Zauważ też, że jeśli coś po drodze jest nieczytelne test( [), powinno być w stanie stwierdzić, czy plik należący do roota istnieje, czy nie (np. [ -f /root/.ssh/known_hosts ]Prawdopodobnie zawiedzie, ponieważ katalog /root/.ssh nie jest (a przynajmniej nie powinien powinien być czytelny dla zwykłego użytkownika. [ -f /etc/crontab ]powinien się powieść).
Istnieje możliwy problem: jeśli sudopolecenie się nie powiedzie (złe hasło, niedozwolone w / etc / sudoers itp.), Da ten sam rezultat, jakby plik nie istniał.
Gordon Davisson,
1
@Gordon - prawda: Moja odpowiedź jest sudo
uzależniona od
13
if sudo test -f "/path/to/file";then
echo "FILE EXISTS"else
echo "FILE DOESN'T EXIST"fi
Aby wykonać czynności, po przeciwnej stronie, jeśli chcesz sprawdzić z katalogu głównego, czy plik lub katalog jest czytelny dla określonego użytkownika, którego możesz użyć
if sudo -u username test -f "/path/to/file";then
echo "FILE EXISTS"else
echo "FILE DOESN'T EXIST"fi
Odpowiedź Lucy Borrione działała dla mnie idealnie. Musiałem przetestować istnienie plików, które były głęboko w katalogach odczytywalnych tylko przez root.
wallheater
1
Dodając do innych odpowiedzi, rozróżnienie między niepowodzeniem uwierzytelnienia testowego lub sudo można wykonać przy pierwszym uruchomieniu sudo true. Większość implementacji sudo, o których wiem, nie wymaga ponownego uwierzytelnienia w krótkim czasie.
Na przykład:
if sudo true;thenif sudo test -f "/path/to/file";then
echo "FILE EXISTS"else
echo "FILE DOESN'T EXIST"fielse
echo "SUDO AUTHENTICATION FAILED"fi
Odpowiedzi:
To, co opisujesz, powinno działać dobrze - o ile korzystasz ze ścieżek bezwzględnych, a
-f
(„Plik istnieje i jest zwykłym plikiem”) jest tak naprawdę testem, który chcesz wykonać.Widzę ślad
/
w tym, co napisałeś w swoim pytaniu - Czy testujesz katalog? To powinno być-d
lub po prostu-e
(„Coś istnieje z tą nazwą - niezależnie od typu”)Zauważ też, że jeśli coś po drodze jest nieczytelne
test
([
), powinno być w stanie stwierdzić, czy plik należący do roota istnieje, czy nie (np.[ -f /root/.ssh/known_hosts ]
Prawdopodobnie zawiedzie, ponieważ katalog /root/.ssh nie jest (a przynajmniej nie powinien powinien być czytelny dla zwykłego użytkownika.[ -f /etc/crontab ]
powinien się powieść).źródło
sudo
polecenie się nie powiedzie (złe hasło, niedozwolone w / etc / sudoers itp.), Da ten sam rezultat, jakby plik nie istniał.sudo
strona testowa
Aby wykonać czynności, po przeciwnej stronie, jeśli chcesz sprawdzić z katalogu głównego, czy plik lub katalog jest czytelny dla określonego użytkownika, którego możesz użyć
źródło
Dodając do innych odpowiedzi, rozróżnienie między niepowodzeniem uwierzytelnienia testowego lub sudo można wykonać przy pierwszym uruchomieniu
sudo true
. Większość implementacji sudo, o których wiem, nie wymaga ponownego uwierzytelnienia w krótkim czasie.Na przykład:
źródło