To prawdopodobnie duplikat, ale wszystkie moje wyszukiwania pokazują pytania dotyczące błędów odmowy uprawnień.
Uruchamiam polecenie w powłoce bash. Chcę przekierować dane wyjściowe, aby dołączyć je do pliku, który prawdopodobnie nie istnieje przy pierwszym uruchomieniu. Chcę ustawić tryb uprawnień do określonych plików, jeśli przekierowanie danych wyjściowych musi utworzyć ten plik. Czy można to zrobić za pomocą jednego polecenia?
Na przykład mogę spróbować
foo >> /tmp/foo.log 0644
gdzie 0644
są uprawnienia, z którymi chcę foo.log
skończyć. Większość poleceń, z którymi eksperymentowałem w bash, kończy się interpretacją 0644
jako dodatkowy argument foo
.
Mam wrażenie, że zajmie to drugie polecenie chmod
uprawnień przed lub po napisaniu do niego.
Używam GNU bash 4.2.25 i Ubuntu 12.04, jeśli to robi różnicę - preferowane są ogólne odpowiedzi.
źródło
umask
odpowiedzi są lepsze i jedną z nich należy zaakceptować.Wiem, że to stare pytanie, ale chciałem dodać moje dwa centy.
Miałem ten sam pomysł i wpadłem na rozwiązanie podobne do BowlesCR . Problem z jego rozwiązaniem polegał na tym, że moje polecenie (
foo
) nie działało, jeśli zmieniłem umask przed jego uruchomieniem, więc oto moje podejście do problemu:Tutaj
umask
wpływa tylko na przekierowanie dofoo.log
podpowłoki. Wszystko inne pozostaje nienaruszone.Trochę zawiłe, ale działa.
źródło
Bez prawdziwego skryptu możesz trochę połączyć:
Skutecznie podobny do odpowiedzi Slowki , ale skondensowany w jedno-liniowy.
Jedyne, o czym myślę, to majstrowanie przy umasku. Najlepiej to zrobić w podpowłoce, aby nie zanieczyszczać bieżącego środowiska:
Dwa problemy z tym jednak.
creat()
syscall (0666 wydaje się być tym, czego używa Bash).umask
dotyczy tylko tworzenia plików ).źródło
cat
. (Chociaż nie jest to zgodne ze standardowym wzorcem bezużytecznych zastosowańcat
.) (2) Zakładam, że chciałeś powiedzieć, że domyślnie bash ma domyślnie tryb 0666 podczas tworzenia plików, więc zredagowałem twoją odpowiedź, aby tak powiedzieć. (Zobacz to , to ... (ciąg dalszy)umask
wartość 22, 23 lub 32 również działałaby w tym kontekście (nie trzeba używać początkowych zer); kiedy tryby iumask
wartości są określone liczbowo, zawsze są interpretowane jako ósemkowe).22
jest częściej stosowany konwencjonalnie.Gdy przekierowanie ustawia nieprawidłowe uprawnienia, np .:
Wierzę, że możesz użyć czegoś, co dał xynomorf, i rozwiązać problem stderr z Orsiris de Jong z niewielką modyfikacją, aby użyć substytucji procesu bash .
Oczywiście, użyj,
umask 0077
aby uzyskać tryb600
i zabronić innym użytkownikom oglądania zawartości.źródło
Jeśli chcesz przekierować do skryptu, w przeciwieństwie
umask
do podstawiania procesówinstall
, możesz także ustawić bit wykonania:<()
umieszcza dane wyjściowe w pliku tymczasowym, patrz Zastąpienie procesuźródło