Bir satırda birbirinden ayrılmış birkaç xdotool komutu çalıştırın


11

Ben xdotool type wordsonra xdotool key ReturnBaşlangıç ​​Uygulamaları Tercihleri çalıştırmak için çalışıyorum .
Ama &&veya kullanırsam ;, xdotool bunu girişin devamı olarak değerlendirir.


1
Benim kullanım durumumda xdotool type $'word\r', $''kaçış \rgibi bir yerde ( \nburada çalışmaz) kaçar .
Scz

Yanıtlar:


16

Uzun lafın kısası:
Bir senaryo kullanın.

#! /bin/sh
# With some window selection magic, or a sleep 
# if you want to do that manually.
xdotool type word
xdotool key Return

Ve betiğin yolunu Execalana koy .


Uzun Hikaye:

xdotoolManpage'e göre :

type
       Supports newlines and tabs (ASCII newline and tab). 
       With respect to "COMMAND CHAINING", this command consumes the
       remainder of the arguments and types them. That is, no commands can
       chain after 'type'.

Komut zincirleme yoluyla ;veya &mümkün değil, çünkü kabuk sözdizimi ve Başlangıç ​​Uygulamaları kabuk sözdizimini desteklemiyor. Bununla birlikte, tek yapmanız gereken bir Enterşey yazdıktan sonra basmaksa, bunu yapmanın dolambaçlı bir yolu vardır.

"ASCII" satırsonu dediğinde, çıplak demek değildir \n. Ve komut ikamesi ( xdotool type "$(printf '\n')"diyelim) sondaki satırları yiyor. Bu xdotoolsforum gönderisini takiben bunu denedim:

xdotool type "$(printf 'date\n ')"

Ve işe yaradı. Ancak, yalnızca karakterin ardından bir karakter varsa işe yarar \nve bu açıkça istediğiniz bir alan bırakmaz. Bunu şu şekilde değiştirdim:

xdotool type "$(printf 'date\n\e ')"

Ve bu çalışıyor ve sondaki boşluk bırakmıyor. Ancak, kabuklarında Vi modunu kullananlar için sorunlara neden olabilir.

Sayesinde @ steeldriver yorumlarına bu çok uç ben komut çalıştırmak edildi üzerinde denemek bana kaynaklandığını anladım. Tek bir yeni satırın doğru şekilde kaydedilmesi için, basmam Enterve xdotoolkomut arasındaki küçük bir boşluk yeterliydi. Böylece:

sleep 0.1; xdotool type $'date\n'

Yani ya çizgiyi alıntı yaparak genişletmek:

xdotool type 'date
'

veya kabuk yorumunu @steeldriver'ın önerdiği gibi kullanmak doğru seçeneğe benziyor.

Ancak, aşağıdakileri içeren bir komut dosyası:

#! /bin/sh
sleep 1
xdotool type date
xdotool key Return

içinde Execsahada cezası çalıştı. Gerçekten de, her zaman bir masaüstü dosyasındaki karmaşık komutlar için bir komut dosyası kullanmanızı öneririm.

Sen-ebilmek var olmak sen-si olmak bir senaryo ile /usr/bin/xdotoolshebang, ama manpage " scriptmod tamamen etli değil ve beklentilerinizin altına düşebilir" diyor, bu yüzden komut dosyaları bash sıkışmış.

Bir şeyler görüyor olabilirdim, ama ilk denememde, ve komutları sleeparasına (küçük) koymak zorunda kaldımtypekey . Bu, başka bir pencere yerine komutları yürüten terminalde denemenin bir eseriydi.


Bir hazır satır, yani iş gibi görünüyor xdotool type 'word'Enter' anahtarı ve daha sonra kapatma, ardından 'olarak yapar $'word\n'(ki burada darbe genişleyen \nbir hazır yeni satır için bağımsız değişkeni geçirmeden önce xdotool).
steeldriver

@steeldriver vur-kaç. Denediğim ve çalışmadığım ilk şeylerden biriydi.
muru

@steeldriver İşe yarayan iki yeni satırdı ( hile ile kapatmadan önce 'iki giriş veya hile). \n$
muru

bu garip, ekstra satırsonu benim için gerekli görünmüyor - acaba hedef pencerenin sahibi olan uygulamaya bağlı mı acaba (geany'de boş bir belge kullanıyordum)?
steeldriver

@steeldriver bahşiş için teşekkürler. İhtiyacım hakkında halüsinasyon yapmadığımı bilmek güzel sleep(küçük metindeki nota bakınız). Pencereleri değiştirmedim ve sadece aynı pencerede deniyordum, ancak bir sleep 1, her iki yöntem de aynı pencerede ve geçiş yaptıktan sonra çalıştı. Sanırım kendi Enter tuşuna basıyorum bir şekilde xdotool satırsonuna müdahale etti. Ancak, bir masaüstü dosyasının daha karmaşık gereksinimi için, komut dosyasını yine de tavsiye ederim.
muru

1

Bana göre uygulama birden fazla komutu ayrıştırmıyor, tek bir komut gibi davranıyor. Bu nedenle, bir kabuk çağrısını sararak tek bir komut yapın ...

bash -c 'xdotool type date; xdotool key Return'

Şimdi başka kabuk işleri de yapabilirsiniz ...

bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'

Son kullanılan "tarih" komutunun bir yeni satır içerdiğini unutmayın! ve "xdotool" çıktı verecektir.

NOT: Bunu bir klavye makrosu olarak yapıyorsanız, daha iyi çalışması için "xdotool" a birkaç seçenek daha ekleyeceğim ...

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
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.