W bash mogę wykonać następujące czynności:
if [ -f /tmp/test.txt ]; then echo "true"; fi
Jednak jeśli dodam sudo
z przodu, to już nie działa:
sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token `then'
Jak mogę to zrobić?
bash
command-line
sudo
prompt
m33lky
źródło
źródło
sudo
tylkotest
i / lub tylkoecho
. Nie całeif
oświadczenie.if sudo test
? Tak, byłoby lepiej. Nie mogę używaćtest
bezif
, ponieważ ustawia kod wyjścia inaczej.Odpowiedzi:
sudo
wykonuje swój argument, używającexec
, a nie interpretera powłoki. Dlatego jest ograniczony do rzeczywistych programów binarnych i nie może używać funkcji powłoki, aliasów ani wbudowanych funkcji (if
jest wbudowany). Zauważ, że opcje-i
i-s
mogą być użyte do wykonania podanych poleceń odpowiednio w powłoce do logowania lub bez logowania (lub tylko w powłoce, interaktywnie; pamiętaj, że będziesz musiał uciec ze średnika lub zacytować polecenie).źródło
-i
lub-s
, instrukcja if zostanie właściwie oceniona?Spróbuj wywołać linię jako argument ciągu przez powłokę.
źródło