komut isteminden if-deyimini çalıştırma


19

Bash'da aşağıdakileri yapabilirim:

if [ -f /tmp/test.txt ]; then echo "true"; fi

Ancak, sudoön eklerseniz , artık çalışmıyor:

sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token `then'

Nasıl çalıştırabilirim?



Bu daha iyi bir uygulamadır sudosadece testve / veya sadece echo. İfadenin tamamı değil if.
jippie

Yani if sudo test? Evet, bu daha iyi olurdu. Bunun testdışında ifçıkış kodunu ayarladığı için kullanamıyorum .
m33lky

Yanıtlar:


15

sudoargümanını execbir kabuk yorumlayıcısı kullanarak değil yürütür . Bu nedenle, gerçek ikili programlarla sınırlıdır ve kabuk işlevlerini, takma adlarını veya yerleşiklerini ( ifbir yerleşiktir) kullanamaz . O Notu -ive -s(, siz noktalı virgül kaçmak veya komutu alıntı gerekecek not olduğunu etkileşimli ya da sadece kabuk,) seçenekleri için giriş bilgileri veya olmayan giriş kabuğu sırasıyla verilen komutları yürütmek için kullanılabilir.

$ sudo if [ -n x ]; then echo y; fi
-bash: syntax error near unexpected token `then'
$ sudo if [ -n x ]\; then echo y\; fi
sudo: if: command not found
$ sudo -i if [ -n x ]\; then echo y\; fi
y
$ sudo -s 'if [ -n x ]; then echo y; fi'
y

Yani, -iveya kullanırsam -s, if-ifadesi düzgün bir şekilde değerlendirilecek mi?
m33lky

2
Evet, uygun şekilde alıntılandığı veya kaçtığı sürece. Düzenlememe bakın.
Kevin

9

Satırı kabuktan dize bağımsız değişkeni olarak çağırmayı deneyin.

sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.