Karena tidak ada perintah sudo di Cygwin , skrip yang ingin saya jalankan gagal
./install.sh: line N: sudo: command not found
Apa cara standar untuk mengatasi ini? Mengedit skrip untuk dihapus sudo
? Mendapatkan beberapa sudo
alat seperti Windows?
windows
command-line
cygwin
Jason Sundram
sumber
sumber
Jawaban:
Saya menulis TOUACExt (agak sederhana) untuk SUDO untuk CygWin , otomatisasi skrip shell pra-beta yang mendekati perilaku klasik
sudo
untuk Linux:Instalasi memerlukan penyalinan empat
.sh
skrip ke beberapa direktori jalur, membuat alias dan hanya beberapa langkah lebih rinci dalam utas.Hasilnya : Anda mengetikkan satu
sudo YourCommand
dan Anda mendapatkan outputnya, tanpa harus khawatir tentang sisa proses.sumber
Salah satu caranya adalah dengan membuat perintah "sudo" palsu dengan konten berikut:
Ini akan memungkinkan
install.sh
untuk melanjutkan, karena sudo ditemukan.Ini tidak meningkatkan hak istimewa seperti sudo nyata. Jika Anda benar-benar memerlukan hak istimewa yang ditingkatkan mulailah dengan cygwin shell dari akun dengan hak administratif (rp) atau klik-r pada cygwin.bat dan "jalankan sebagai administrator" (Vista, Win7)
sumber
bash
: Mengapa ini berhasil? Halaman manual tidak mengatakan apa-apa tentang$@
melakukan sesuatusudo
seperti. Alih-alih itu hanya argumen untuk skrip. Dan bukankah kutipan di sekitarnya akan berlebihan dalam kasus itu? Kalau tidak, jika Anda akan melakukansudo foo bar
maka ia mencoba mengeksekusi"foo bar"
sebagai perintah tunggal yang mungkin tidak ada mengingat ketakutan irasional ruang pada sistem seperti UNIX."$@"
(ketika dikutip ganda) bekerja berbeda dari"$*"
: itu diperluas ke kata yang terpisah untuk setiap variabel posisi. Contoh: Jika$1 == "foo bar"
dan$2 == "baz"
, kemudian"$@"
adalah"foo bar" baz
- satu kata untuk setiap parameter (tidak seperti"$*"
, yang menghasilkan"foo bar baz"
satu kata). Lihat manualbash
, bagian Parameter , subbagian Parameter khusus . Hasil akhir dari skrip Peon adalah bahwa ia mengeksekusi argumennya persis seperti yang disahkan.sudo
bagian itu masuk? Cuplikan di atas tidak melakukan apa pun dari jarak jauh ke arah itu, kan?sudo
akan meningkatkan hak istimewa dari manusiaroot
sebelum menjalankan perintah. Di Cygwin, tidak ada hal seperti itu, jadi skrip palsu Peon (yang seharusnya Anda sebutkansudo
) hanya menjalankan perintah secara langsung tanpa mengubah hak istimewanya. (Ini berarti Anda mungkin perlu menjalankan./install.sh
sebagai Administrator.)runas
harus berfungsi, tidak bergantung pada UAC dan meminta kata sandi dengan sendirinya. Saya hanya bingung mengapa naskah dalam jawaban itu ternyata tidak melakukan apa yang tersirat nama yang saya anggap tujuannya. Maaf atas kebodohan saya ;-)Saya menemukan jawabannya di milis cygwin . Untuk menjalankan
command
dengan hak istimewa yang lebih tinggi di Cygwin, awali perintah dengancygstart --action=runas
seperti ini:Ini akan membuka kotak dialog Windows yang meminta kata sandi Admin dan menjalankan perintah jika kata sandi yang tepat dimasukkan.
Ini mudah ditulis, asalkan
~/bin
ada di jalur Anda:Diuji pada Windows 8 64-bit.
sumber
cygstart
metode ini adalah hanya berfungsi untuk perintah / program Windows. Anda tidak bisa melakukannyasudo ls
. SUDO untuk CygWin rapi, tetapi masih kurang memilikisudo
perintah yang baik di dalamnya.sudo ls
Cygwin?sudo
untuk CygWin untuk menjalankan perintah Windows atau CygWin. Ini sangat berguna bagi saya. Tetapi metode yang lebih praktis yang saya temukan adalah pembungkus skrip ini untuk SUDO untuk CygWin yang saya kembangkan: superuser.com/questions/741345/… (masih dalam Beta, tetapi tampaknya berfungsi). Dengan itu Anda dapat dengan nyaman memesan hal-hal sepertisudo net start vncserver
./bin
dan/usr/bin
dariPATH
. Itu berhasil memanggil emacs:ShellExecute(NULL, "runas", "C:\cygwin64\bin\emacs-w32.exe", "(null)", "(null)", 1)
tetapi kemudian emacs tidak dapat menemukanls
misalnyaM-x dired
, bahkan setelah secara interaktif mengembalikan PATH menggunakan(setenv ...)
. Apakah ada masalah jalur tepercaya di sini?Membangun jawaban dotancohen Saya menggunakan alias:
Berfungsi sebagai daya tarik untuk program eksternal (bukan built-in shell):
sumber
Sudo (Tinggikan) untuk Windows ™
Saya melakukan banyak pekerjaan pada baris perintah di Windows ™.
Di Cygwin itu sendiri saya percaya Anda dapat menjalankan perintah root dengan
su -c /the/cmd
untuk sudo itu sendiri dalam sistem file Windows ™ meningkatkan izin pengguna dari baris perintah, Jika Anda seorang administrator, ini akan bekerja sangat baik untuk Anda. Kalau tidak, gunakan runas dan dapatkan pass admin;).Sekarang saya tidak ingat di mana kami mendapat kode ini, tetapi ini dia. Saya harap ini membantu.
BTW, paket yang kami gunakan untuk mengkompilasi ini
gcc-mingw32
.sumber
Sedikit peningkatan pada naskah sudo palsu Peon :
Script ini secara diam-diam menjatuhkan opsi apa pun yang diteruskan ke sudo dan mengeksekusi perintah (tanpa benar-benar meningkatkan hak istimewa). Menjatuhkan opsi agak meningkatkan kompatibilitas. Script wrapper yang lebih lengkap sebenarnya harus mengurai opsi dengan cara yang sama seperti sudo.
Alih-alih mencoba mengganti sudo dengan pembungkus yang berfungsi
cygstart --action=runas "$@"
, gunakan saja pembungkus sudo palsu sederhana ini dan jalankan skrip instalasi Anda sendiri (atau apa pun yang Anda coba jalankan yang menggunakan sudo) dengan hak istimewa yang tinggi.sumber