एक दूसरे से अलग एक पंक्ति में कई xdotool कमांड चलाएं


11

मैं xdotool type wordफिर xdotool key Returnसे शुरू करने की कोशिश कर रहा हूँ स्टार्टअप प्राथमिकताएँ।
लेकिन अगर मैं उपयोग करता हूं &&या ;, xdotool इनपुट की निरंतरता के रूप में इसका मूल्यांकन करता है।


1
मेरे उपयोग-मामले में यह साथ काम करता है xdotool type $'word\r', जहाँ रिटर्न जैसी चीज़ से $''बच जाता है \r( \nयहाँ काम नहीं करता है)।
Scz

जवाबों:


16

लंबी कहानी छोटी:
एक स्क्रिप्ट का उपयोग करें।

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

और लिपि का मार्ग Execक्षेत्र में रखा।


लम्बी कहानी:

xdotoolमैनपेज के अनुसार :

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'.

शेल के माध्यम से कमांडिंग ;या &संभव नहीं है, क्योंकि शेल सिंटैक्स है और स्टार्टअप एप्लिकेशन शेल सिंटैक्स का समर्थन नहीं करता है। हालाँकि, अगर आप कुछ करना चाहते हैं तो Enterकुछ टाइप करने के बाद प्रेस करें, ऐसा करने के लिए एक राउंडअबाउट तरीका है।

जब यह "ASCII" की नई पंक्ति कहता है, तो इसका मतलब नंगे नहीं है \n। और कमांड प्रतिस्थापन ( xdotool type "$(printf '\n')", कहते हैं) अनुगामी newlines खाती है। इस xdotoolsमंच पोस्ट के बाद , मैंने यह कोशिश की:

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

और इसने काम किया। लेकिन यह केवल तभी काम करता है जब उसके बाद कुछ चरित्र हो \n, और यह स्पष्ट रूप से एक अनुगामी स्थान छोड़ता है, जो आप चाहते हैं वह नहीं होगा। मैंने उसे संशोधित किया:

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

और यह काम करता है और कोई स्थान नहीं छोड़ता है। हालांकि, यह उनके शेल में वीआई मोड का उपयोग करने वालों के लिए समस्या पैदा कर सकता है।

के लिए धन्यवाद @ steeldriver की टिप्पणी मैं पता लगा कि यह मेरे की वजह से बहुत टर्मिनल मैं पर आदेशों को क्रियान्वित किया गया था पर इसे बाहर की कोशिश कर रहा था। मेरे दबाव Enterऔर xdotoolकमांड के बीच बस एक छोटा सा अंतर एक ही नई लाइन के लिए सही ढंग से पंजीकृत होने के लिए पर्याप्त था। इस प्रकार:

sleep 0.1; xdotool type $'date\n'

इसलिए या तो इसे उद्धृत करके लाइन का विस्तार करें:

xdotool type 'date
'

या शैल व्याख्या का उपयोग @steeldriver के रूप में करने का सुझाव दिया सही विकल्प की तरह लग रहा है।

हालाँकि, एक स्क्रिप्ट जिसमें:

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

में Execक्षेत्र ठीक काम किया। वास्तव में, मैं हमेशा एक डेस्कटॉप फ़ाइल में जटिल कमांड के लिए स्क्रिप्ट का उपयोग करने की सलाह देता हूं।

आपके पास /usr/bin/xdotoolशेबंग के साथ एक स्क्रिप्ट हो सकती है , लेकिन मैनपेज कहता है " scriptमोड पूरी तरह से फ़ेलशेड नहीं है और आपकी अपेक्षाओं से कम हो सकता है", इसलिए मैं स्क्रिप्ट को काटने के लिए अटक गया।

मैं चीजों को देख रहा हूं, लेकिन मेरे पहले दो प्रयासों में, मुझे और आदेशों के sleepबीच एक (छोटा) करना पड़ाtypekey । यह टर्मिनल पर इसे आज़माने की एक कला थी जो दूसरी विंडो के बजाय कमांड को निष्पादित कर रही थी।


एक शाब्दिक न्यूलाइन काम करने लगती है, xdotool type 'wordजिसके बाद 'एन्टर' कुंजी होती है और फिर क्लोजिंग होती है ', जैसा कि $'word\n'(जिसमें बैश \nतर्क पास करने से पहले शाब्दिक न्यूलाइन में फैलता है xdotool)।
स्टीलड्राइवर

@steeldriver हिट-एंड-मिस। यह उन पहली चीज़ों में से एक थी, जिनकी मैंने कोशिश की और काम नहीं किया।
मूरू

@steeldriver क्या काम किया था दो newlines (बंद करने से पहले दो Enters 'या चाल के \nसाथ दो $)।
मुरु

यह अजीब है, अतिरिक्त न्यूलाइन मेरे लिए आवश्यक नहीं लगती है - मुझे आश्चर्य है कि अगर यह उस एप्लिकेशन पर निर्भर करता है जो लक्ष्य विंडो का मालिक है (मैं geany में एक खाली दस्तावेज़ का उपयोग कर रहा था)?
स्टीलड्राइवर

@steeldriver टिप के लिए धन्यवाद। मुझे यह जानकर खुशी हुई कि मैं sleep(छोटे पाठ में नोट देखें) की आवश्यकता के बारे में मतिभ्रम नहीं कर रहा था । मैं विंडोज़ नहीं बदल रहा था और बस एक ही खिड़की पर इसे आज़मा रहा था, लेकिन एक के साथ sleep 1, दोनों तरीकों ने एक ही खिड़की और स्विचिंग के बाद दोनों के साथ काम किया। मुझे लगता है कि मेरा अपना Enter keypress किसी भी तरह xdotool newline के साथ हस्तक्षेप किया है। हालाँकि, डेस्कटॉप फ़ाइल की अधिक जटिल आवश्यकता के लिए, मैं अभी भी स्क्रिप्ट की सिफारिश करूंगा।
मूरू

1

मुझे लगता है कि आवेदन कई आदेशों को पार्स नहीं कर रहा है, लेकिन इसे एक ही आदेश के रूप में माना जाता है। जैसे कि इसे शेल कॉल रैप करके इसे एक ही कमांड बनाएं ...

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

अब आप अन्य शेल चीजें भी कर सकते हैं ...

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

ध्यान दें कि उस अंतिम में प्रयुक्त "तिथि" कमांड में एक नई पंक्ति शामिल है! और "xdotool" इसे आउटपुट करेगा।

नोट: यदि आप इसे कीबोर्ड मैक्रो के रूप में कर रहे हैं, तो मैं इस काम को बेहतर बनाने के लिए "xdotool" में कुछ और विकल्प भी जोड़ूंगा ...

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.