Özet: Arka planda bir işlem çalıştıran ve normal bir komut olarak çalışacak bir komut satırı bloğu gibi bir bash komut dosyası var. $(...)
. Betiğin kendisi, arka plana çatallanan bir işlem ortaya çıkarır.
#!/bin/sh
echo something
sleep 5 &
bir kabukta bu senaryoyu hemen yayınlamak dönecektir (ve baskı "bir şey") $(...)
içine çalışan, backgrounded "uyku" bekliyor, 5 saniye boyunca askıda kalacaktır: test durumu indirgenebilir bitirmek için.
Komut ikamesi kabuğunda başlatılan ve görünüşte bu süreç ağacındaki çocuklar da dahil olmak üzere arka planda artalan süreçleri başlatır. Hem bash hem de zsh'i etkiliyor gibi görünüyor, başkalarını denemediniz.
Orijinal soru: Ben her çalıştığında Stdout'a bir değer yazdırmak gerekiyordu ve ayrıca X panoya kopyalama bir bash komut dosyası var.
$ something
something
$ xclip -o -selection clipboard
something
$ echo $(something)
^C
:
#!/bin/sh
echo something
echo something | xclip -selection clipboard
Bu komut dosyası (en diyoruz "bir şey" let) (aslında başka komutun çıktısı olan) bu kelimeyi almak için kullanılacak ve bu şekilde farklı şekillerde kullanılabilir kastedilmektedir
Normal stdout'a yazdırır, çıktıyı normal X uygulamalarında kullanılacak panoya kopyalar ve ayrıca bu sözcüğü herhangi bir komutun ortasına eklemek için bash komutuyla birlikte stdout'u da kullanabilmelidir. Bununla birlikte, bash komutunun ikame edilmesi, ön planda canlı kalması için xclip
'u zorlar gibi görünmektedir. xclip
, X panosunun bir istemcinin pano içeriğini sağlamasını gerektirdiğinden ve varsayılan davranışı, pano içeriğinin değiştirilmesinden sonra onu devre dışı bırakması gerektiğinden, normal olarak kendini gizler. o
Herkes bu davranış açıklayabilir $(...)
kabuğun içine daemonizes o şey uygulamak gibi görünüyor bu yüzden ben bu soruya başında yazdığı minimum test dava bile xclip bu konuyu ettikten sonra
? Bundan kaçınmamın bir yolu var mı? Arka plandaki işlemin komut değiştirmeye müdahale etmesini istemiyorsanız, stdout'unun bağlantısını kesmeniz gerekir.
Woo! Mükemmel ve son derece basit bir çözüm. Teşekkürler! – dequis
Bu arada,/dev/null yerine bir dosyaya yönlendirmek çıktıyı yakalamak için çalışıyor gibi görünüyor, ama en azından burada çıktı dosyası sadece arkaplan işleminden sonra güncelleniyor gibi görünüyor. (Bunun için buna ihtiyacım yok) – dequis