mengeksekusi if-statement dari command prompt


19

Dalam bash saya bisa melakukan hal berikut:

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

Namun, jika saya tambahkan sudodi depan, itu tidak berfungsi lagi:

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

Bagaimana saya bisa membuatnya bekerja?



Ini adalah praktik yang lebih baik untuk sudohanya testdan / atau hanya echo. Bukan keseluruhan ifpernyataan.
jippie

Maksudmu if sudo test? Ya, itu akan lebih baik. Saya tidak dapat menggunakan testtanpa if, karena mengatur kode keluar jika tidak.
m33lky

Jawaban:


14

sudomengeksekusi argumennya menggunakan exec, bukan melalui shell interpreter. Oleh karena itu, ini terbatas pada program biner aktual dan tidak dapat menggunakan fungsi shell, alias, atau builtin ( ifadalah builtin). Perhatikan bahwa opsi -idan -sdapat digunakan untuk mengeksekusi perintah yang diberikan dalam login atau shell non-login, masing-masing (atau hanya shell, secara interaktif; perhatikan bahwa Anda harus melarikan diri dari tanda titik koma atau mengutip perintah).

$ 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

Jadi, jika saya menggunakan -iatau -s, pernyataan jika akan dievaluasi dengan benar?
m33lky

1
Ya, selama itu dikutip atau lolos dengan benar. Lihat hasil edit saya.
Kevin

9

Coba panggil baris sebagai argumen string melalui shell.

sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.