Birden fazla Bash komutunu kaybetmeden bir kabuğa nasıl yapıştırabilirim?


6

Bir web sitesinde bulacağınız bir dizi Bash komutunu kopyalayıp yapıştırmak güzel. Ancak komutlara bağlı olarak, bazen birkaçını kaybedersiniz. Belki de standart girdiden okuyan programlar tarafından yutulurlar veya belki başka bir açıklaması vardır.

Bu yüzden bazen bunu yapıyorum:

$ bash <<EOF
cmd2
...
EOF

Daha iyi bir yolu var mı? Bazı Bash seçeneği? Bir SSH seçeneği? (Kurulumum, standart bir OS X terminalinden SSH'lu olduğum bir Ubuntu sunucusunda çalışan bir Bash. Ancak bunun ne kadar önemli olduğundan emin değilsiniz.)

DÜZENLE

Örnek

Somut bir örnek taleplerine cevap olarak, işte bir tane. Aşağıdaki dört satırı bir SSH kabuğuna (Snow Leopard masaüstümden) bir OpenStack VM'de çalışan bir Ubuntu Quantal ürününe bağlı olarak Bash kabuğuna yapıştırdım.

sudo apt-get install -y r-base gdebi-core
sudo apt-get install -y libapparmor1 # Required only for Ubuntu, not Debian
wget http://download2.rstudio.org/rstudio-server-0.97.314-amd64.deb
sudo gdebi rstudio-server-0.97.314-amd64.deb

İlk iki komut (başarıyla) yürütülürken, son iki görünüşe göre sunucu tarafından asla alınmadı (ya da en azından asla Bash tarafından işlenmedi).


1
Neyin başarısız olduğuna dair özel bir örneğiniz var mı?
slhck

Hayır Genellikle uzun süren komut gibi apt-get update, git clone, wgetvb
Steve Bennett

1
Sorun: bir komut dizisini bir kabuğa yapıştırmak ve ardından yürütmek için uygun ve sağlam bir mekanizmaya ihtiyaç duymak, terminalin değişmezlerine güvenmek değildir.
Steve Bennett,

1
Burada OT, ama yine de ilginç. En azından gerçekten şaşırdım, bazen web sitelerinden kopyala ve yapıştır ile ne beklediğinizi anlamadınız
mpy

2
Bu, "Bana bir kaya bul" ("Hayır, bu çok büyük."; "Hayır, bu çok küçük."; "O kadar değil, rengi sevmiyorum.") Oyununu okuyor. sorun açıklaması size daha az tahmin ve daha iyi olmasını istediğiniz bazı alakalı cevaplar verebilir.
JRobert

Yanıtlar:


3

Hızlı ve kirli bir çözüm bunu çalıştırmaktır:

bash -c '<paste commands here>'

Bu, yeni satır karakterleri yapıştırsa bile çalışır. Yapıştırma tek tırnak içeriyorsa başarısız olabilir. Bash tırnak işareti kurallarının farkındaysanız, çalıştırmaya çalıştığınız belirli komutlar için bu yöntemi değiştirebilmelisiniz.


Mükemmel - komut satırlarına yeni satırlar koyabileceğinizi bilmiyordum.
Steve Bennett

5

Ayrıca gibi bir şey kullanabilirsiniz pbpaste | bash. Ve edit-and-execute-command( \C-x\C-e) ayrıca çoklu komutlarla da çalışır.

Bazı komutlar root izinleri gerektiriyorsa sudo -v, zaman damgasını 5 dakika boyunca doğrulamak için kullanabilirsiniz .


OP, bir Ubuntu sunucusunda SSHing olduğundan pbpaste, içine bashkolayca yapılamaz.
slhck

2
Ah, şu anki düzenleme çizgisi numarası işe yarıyor. (Diğer notasyonlarda Ctrl-x, Ctrl-E veya ^ X ^ E).
Steve Bennett,

Tamamen birkaç tuşa basmak yeterli: Ctrl + X, Ctrl + E, Cmd-V, Ctrl + X, Y, <enter>
Steve Bennett

xselLinux'ta.
Ciro Santilli, 996ICU,

@SteveBennett, $ VISUAL editörünüz nano gibi görünüyor;) tuş vuruşları diğer editörler için farklı
törzsmókus

1

Sevdiğim metin editörüme uygun şekilde adlandırarak bu tür kesimleri ve macunları yapıyorum, sonra yabancı karakterleri dikkatle arayabilirim ve çalıştırmayı umduğum şeyi koşturacağımı temin ederim. Kod pasajlarını kesme ve yapıştırma işlemlerinin etkileşimli bir kabuk üzerine yapıyorum: kesme ve yapıştırma işleminde hangi ilave komutların alınabileceğini kim bilebilir?

Metin dosyanızda onaylanmış komutlar kaydedildikten sonra, yerleşik komutla çalıştırılabilirler.

source <filename>


Tamam, ve bir keresinde, panonun içeriğinin tam olarak ne çalıştırmak istediğinizi gördüğünüzden memnun kaldınız mı?
Steve Bennett

Orijinal güncellendi; Kaydedilen dosyada, ifadeleri çalıştırılabilir yapmak zorunda kalmadan çalıştırmak için 'source <filename>' kullanın.
Nevin Williams,

Ve şimdi bir daha asla koşamayacağınız bir yalancı dosya var. Bu oldukça sakar.
Steve Bennett

o zaman onu sil ve artık buralarda olmayacak.
ShinTakezou

1
Evet. Orijinal << EOF yönteminden daha farklı.
Steve Bennett
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.