Pertanyaan Apa yang dilakukan oleh "apt-get install !!" dan bagaimana cara membuatnya bekerja?


Saya telah melihat seseorang mengetik

apt-get install !!

Dia melakukan itu beberapa kali dan setiap kali, program yang berbeda dipasang. Sepertinya itu secara otomatis menemukan apa yang dibutuhkan selanjutnya.

Namun, ketika saya mencobanya pada mesin virtual Ubuntu 14.04.1 LTS saya, itu hanya menunjukkan beberapa instruksi penggunaan. Googling untuk apt-get install !! tampaknya tidak bekerja dengan baik. Banyak hasil pencarian tidak mengandung tanda seru ganda.

Apa yang terjadi apt-get install !! lakukan dan apa yang bisa hilang pada mesin saya yang tidak berfungsi?


54
2018-05-24 19:11


asal


Lihat juga: stackoverflow.com/q/15137461/3488231 - ace


Jawaban:


!! adalah shortcut di bash yang berarti perintah terakhir dieksekusi.

Coba ini:

 echo hello
 !!

Dalam konteks ini, !! akan diperluas ke yang lain echo hello.

Saya membayangkan apa yang terjadi adalah mereka mencoba menjalankan perintah dan gagal dan mengeluh itu tidak diinstal. Jadi mereka mengetik sudo apt-get install !! karena nama paket itu kebetulan sama dengan nama perintah yang mereka coba jalankan. Perintah yang dihasilkan akan mencoba untuk menginstal paket dengan nama yang sama dengan perintah yang baru saja mereka coba untuk jalankan.


74
2018-05-24 19:12



Ya, mungkin itu. Jika saya jalankan lynx, lihat bahwa itu tidak diinstal dan kemudian jalankan apt-get install !! itu menginstal lynx. Itu tidak berhasil untuk saya, karena saya mencoba apt-get install !! sebagai satu-satunya perintah. - Thomas Weller
Penggunaan umum lainnya adalah ketika sesuatu seharusnya dijalankan sebagai sudo, seperti apt-get installing sesuatu. - MBraedley
@ A.L: Anda pertama kali mengetik apt-get install some-program, dan ketika Anda menyadari Anda tidak memiliki hak istimewa, Anda hanya sudo !!, yang meluas ke sudo apt-get install some-program. - mgarciaisaia
!! adalah alias untuk !-1, yang berarti item terakhir dalam sejarah bash. !-2 adalah kedua dari belakang dan sebagainya. - Tim


!! tidak ada hubungannya dengan apt-get. Ini adalah kata kunci shell yang akan diperluas ke perintah sebelumnya. Ekspansi ini dilakukan oleh shell sebelum perintah saat ini ditafsirkan.

Dari man bash:

!! Lihat perintah sebelumnya. Ini adalah sinonim   untuk `! -1 '.

Misalnya, jika Anda menjalankan perintah:

echo "foo"

Kemudian jika Anda menjalankan:

sudo apt-get install !!

itu akan diperluas ke:

sudo apt-get install echo foo

Seperti yang Anda lihat itu diperluas menjadi dua paket yaitu echo dan yang lainnya foo. Tidak ada paket yang bernama sendiri foo dan echo. Terlepas dari shell builtin echo ada /bin/echo dieksekusi yang merupakan bagian dari paket GNU-coreutils. Jadi, Anda akan mendapatkan kesalahan yang mengatakan bahwa tidak ada paket yang tersedia.

Di sisi lain orang lain mungkin melakukan sesuatu seperti ini:

$ cowsay
The program 'cowsay' is currently not installed. You can install it by typing:
sudo apt-get install cowsay

$ sudo apt-get install !!
sudo apt-get install cowsay
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  filters
The following NEW packages will be installed:
  cowsay
0 upgraded, 1 newly installed, 0 to remove and 119 not upgraded.
Need to get 18.5 kB of archives.

Seperti yang Anda lihat cowsay sedang dipasang.

Saya akan menyarankan Anda untuk tidak melakukan ini (kecuali Anda yakin), bersikap eksplisit tidak membahayakan.


41
2018-05-24 19:27



Penjelasan hebat untuk !!. Saya tahu apa artinya, tapi saya suka cara Anda menggambarkannya. - Terrance
Beri +1 untuk peringatan agar tidak mencobanya di rumah. - Shadur


!! : Lihat perintah sebelumnya. Ini adalah sinonim untuk !-1 (Itu sumber).

Misalnya, jika saya mengeksekusi:

./test

kemudian ingat bahwa saya harus menjadi Root, maka saya cukup mengetik:

sudo !!

itu sama dengan mengetik:

sudo ./test

Ini berguna ketika perintah terakhir Anda mengandung banyak karakter.


16
2018-05-24 19:17



Cemerlang! Saya tidak pernah memikirkan tentang itu sudo !! perintah; apa yang telah saya lakukan selama bertahun-tahun adalah tekan tombol atas sekali, lalu gerakkan kursor ke kiri dan tambahkan sudo. - IQAndreas
@IQAndreas Cara Anda memberi Anda kesempatan untuk memeriksa ulang perintah, yang bukan merupakan hal buruk saat dijalankan sudo. - Matt Nordhoff
Saya selalu membaca "sudo !!" sebagai "i mean sudo for f *** sake" - Viktor Mellgren
@Vixen: Dalam hal itu, thefuck juga bisa menjadi sesuatu untukmu - Thomas Weller
@IQAndreas memindahkan kursor ke kiri sepertinya terlalu membosankan. Kenapa tidak adil saja Ctrl+A atau setidaknya Home? - Ruslan


Pertanyaannya sudah dijawab, jadi saya tidak akan berulang. Namun, saya ingin menunjukkan bahwa ada banyak cara pintas semacam itu di berbagai shell yang membantu mengulang / menemukan / mengedit perintah. Beberapa yang saya gunakan adalah:

  1. !$ diikuti oleh MEMASUKKAN akan mengetik kata terakhir dari perintah terakhir. Sebagai contoh,

    ls -l /let/me/in
    cd !$
    

Ini akan membuatmu mendarat /let/me/in

  1. Ctrl-R dan kemudian ketik beberapa kata dari perintah sebelumnya. Misalnya, jika Anda mengetik vi /home/mycoolproject.sh dan mengikutinya dengan beberapa perintah acak seperti ls, cd, pwd, dll. kemudian hanya mengetik Ctrl-R diikuti oleh cool akan menarik itu viperintah.

Hanya mencari pintas keyboard bash (atau csh atau apa pun) dan itu akan menjadi hal terbaik yang Anda lakukan hari ini!


2
2018-05-29 04:32





Seperti yang dijelaskan dengan perintah sebelumnya, tetapi lebih baik tidak menggunakan ini sebagai tangan pendek yang ceroboh. Menjadi lebih langsung itu sederhana dan lebih aman.

$ vim index.php
The program 'vim' is currently not installed. You can install it by typing:
sudo apt-get install cowsay

$ sudo apt-get install !!
# Would be done as sudo apt-get install vim index.php instead of sudo apt-get install vim

-2
2018-05-27 10:35



Nah Anda tidak akan menggunakannya di sana kan ...? Juga komentar bash adalah # - Tim