কমান্ড-লাইনে ইতিমধ্যে নির্দিষ্ট পাঠ্য ইনপুট দিয়ে টার্মিনালটি কীভাবে শুরু করবেন?


25

আমার প্রশ্নের পুনর্বিবেচনা না করে আমাকে আপনার পছন্দসই ব্যবহারকারীর বর্ণনা দিতে দিন:

"জিনোম-টার্মিনাল --someoptionflagname 'আমার পাঠ্য পোস্ট করতে হবে'", এবং এই স্ক্রিপ্টটি সম্পাদন করার জন্য আমি একটি শেল-স্ক্রিপ্ট তৈরি করেছি exec

জিনোম-টার্মিনাল পপ আপ হয়, আমার পাঠ্য অনুসরণ করে কমান্ড-লাইন প্রম্পট সহ।

অর্থাৎ, fields@mycomputer:/$ my text to be posted

এই কাজ করা যাবে?


তাহলে এই বাগ কি কখনো উবুন্টুতে সংশোধন করা হয়েছে আপনি মধ্যে হওয়া উচিত cnee
ündrük

@ ündrük এটি ঠিক হয়ে গেছে এবং প্যাকেজের নাম xneeএখন।
মিষ্টান্ন

উত্তর:


32

আপনি আশা ( ইনস্টল ) দিয়ে এটি করতে পারেন । নির্বাহযোগ্য এবং তৈরি করুন ~/bin/myprompt:

#!/usr/bin/expect -f

# Get a Bash shell
spawn -noecho bash

# Wait for a prompt
expect "$ "

# Type something
send "my text to be posted"

# Hand over control to the user
interact

exit

এবং এর সাথে জিনোম টার্মিনাল চালান:

gnome-terminal -e ~/bin/myprompt

প্রত্যাশা ব্যবহারের জন্য +1। অনেকগুলি জিনিস স্বয়ংক্রিয় করতে সহায়তা করার জন্য আমি কয়েক বছর ধরে এটি ব্যবহার করেছি।
মার্কো সেপ্পি

এটি দুর্দান্ত। আমি আশা করছিলাম ডিফল্ট জিনোম-টার্মিনাল কার্যকারিতার উপর ভিত্তি করে কিছু সাধারণ (আইএসএইচ) উত্তর থাকবে, তবে দেখে মনে হচ্ছে এটি চাকরির উত্তর দেয়।
emf

এই ব্যক্তিটি আমাকে এতদিন ধরে বাগদ্বি করে চলেছে, আমি প্রায় মনে করতে পারছিলাম না যে উদ্দেশ্যে ব্যবহারের ক্ষেত্রে কী ছিল। সুতরাং, স্পষ্টতার জন্য: আমি "জিনোম-টার্মিনাল -e ls" এর মতো কিছু করতে চাই, তবে উইন্ডোটি উন্মুক্ত থাকার বিষয়টি ধরা পড়তে হবে। সুতরাং, মূলত একটি টার্মিনাল খোলার শেল কমান্ডের শর্টকাটগুলি। এটি কি vs বনাম / এমএসডাব্লু এর উত্তরগুলি স্পষ্ট করে?
emf

1
যদি আপনি চান সমস্ত হ'ল একটি কমান্ডের পরে টার্মিনালটি উন্মুক্ত থাকে, তবে আরও অনেক সহজ সমাধান রয়েছে
ündrük

সুপার, ধন্যবাদ। আমি এটিকে সফলভাবে একটি শেল স্ক্রিপ্টে সংহত করেছি যা কল করে পেন্টাহো ডেটা ইন্টিগ্রেশন সরঞ্জামকে calls তারপরে আমি এই স্ক্রিপ্টটিতে ১১.১০ তে ইউনিটি লঞ্চারে কলটি যুক্ত করেছি এবং এটি একটি কবজির মতো কাজ করে।
বায়োশার্ক

8

যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি চান যে আপনার প্রথম ইনপুট লাইনটি আপনি জিনোম-টার্মিনাল কমান্ড লাইনে পাস করা সামগ্রীতে প্রিফিলড।

বাশ দিয়ে ঠিক কীভাবে এটি করা যায় তা আমি জানি না, তবে এখানে এমন কিছু আসে যা কাছে আসে। আপনার মধ্যে ~/.bashrc, খুব শেষে নীচের লাইনটি যুক্ত করুন:

history -s "$BASH_INITIAL_COMMAND"

পাঠান gnome-terminal -x env BASH_INITIAL_COMMAND='my text to be posted' bash, এবং Upপাঠ্যটি মনে করার জন্য প্রম্পটে টিপুন ।

এও নোট করুন যে আপনি যদি আপনার set -o historyশেষে মন্তব্যগুলি অনুসরণ করেন তবে .bashrcতা বাশ শুরু হওয়ার সাথে সাথে সেগুলি ইতিহাসে প্রবেশ করা হবে, তাই আপনি Upকীটি দিয়ে পৌঁছে এবং প্রাথমিকটি মুছে ফেলে সম্পাদনার ভিত্তি হিসাবে এগুলি ব্যবহার করতে পারেন #


2
যদিও আমি যে সমাধানটি সন্ধান করছিলাম তা না হলেও এটি নিজস্বভাবে আকর্ষণীয়।
emf

8

üন্দ্রিকের পরামর্শটি খুব ভাল এবং আমার পক্ষে কাজ করেছে, তবে স্ক্রিপ্টের মধ্যে কমান্ডটি হার্ডকোড করা আছে, এবং আপনি যদি টার্মিনাল উইন্ডোর আকার পরিবর্তন করেন তবে এটি কার্যকর হয় না। বেস হিসাবে তার কোডটি ব্যবহার করে, আমি মায়প্রম্পট স্ক্রিপ্টটি কমান্ডটি আর্গুমেন্ট হিসাবে প্রেরণ করার ক্ষমতা যুক্ত করেছি এবং এই স্ক্রিপ্টটি সঠিকভাবে টার্মিনাল উইন্ডোর আকার পরিবর্তন করে পরিচালনা করে।

#!/usr/bin/expect

#trap sigwinch and pass it to the child we spawned
#this allows the gnome-terminal window to be resized
trap {
 set rows [stty rows]
 set cols [stty columns]
 stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH

set arg1 [lindex $argv 0]

# Get a Bash shell
spawn -noecho bash

# Wait for a prompt
expect "$ "

# Type something
send $arg1

# Hand over control to the user
interact

exit

এবং এর সাথে জিনোম টার্মিনাল চালান:

gnome-terminal -e "~/bin/myprompt \"my text to be posted\""

1

üন্দ্রাকের উত্তর ঠিক আছে, তবে সম্ভবত এই কাজের জন্য কিছুটা ভারী ওজন।

এখানে একটি স্ক্রিপ্ট রয়েছে যা তার যুক্তিগুলির ভিত্তিতে একটি স্ক্রিপ্ট লিখে writes

#!/bin/sh
# terminal-plus-command: start a subordinate terminal which runs
# the interactive shell after first running the command arguments

tmpscript=/tmp/tmpscript.$$
echo "#!$SHELL" > $tmpscript
echo "$@" >> $tmpscript
echo exec "$SHELL" >> $tmpscript
chmod +x $tmpscript
gnome-terminal --command $tmpscript
rm -f $tmpscript

যদি আপনি বেশি শেল প্রোগ্রামিং না করেন তবে এখানে যতটা যাদু রয়েছে তার চেয়ে বেশি এখানে উপস্থিত রয়েছে। প্রথমে আমি স্ক্রিপ্টটি ধরে রাখার জন্য একটি অস্থায়ী ফাইলের নাম রাখি যেখানে $$এই স্ক্রিপ্টটি চালিত শেলের প্রক্রিয়া আইডি রয়েছে। /tmp/something.$$রূপক ক্ষেত্রে এই স্ক্রিপ্টের দুই স্থানেই একই সময়ে চালানো হয় ব্যবহার করা হয়, তারা একই অস্থায়ী ফাইল ব্যবহারের চেষ্টা করা হবে না।

$SHELLস্ক্রিপ্টটি চলমান শেলের নামে ভেরিয়েবল সেট করা আছে। আপনি যদি / usr / bin / bash ব্যবহার করেন তবে সম্ভবত আপনি মিনি স্ক্রিপ্টটি এটি ব্যবহার করতে চান।

"$@""আমার সব আর্গুমেন্ট ঢুকান, তাদের মূল্য উদ্ধৃতি প্রয়োজনে" এর জন্য একটি শেল বাগ্ধারা হয়। এই অদ্ভুত সিনট্যাক্স কারণ

script.sh 'my file' your\ file

দুটি উপাদান হিসাবে আর্গুমেন্ট বিভক্ত করতে

"my file" "your file"

পরিবর্তে $@ফল যে চার হবে

"my" "file" "your" "file"

স্ক্রিপ্টের শেষ লাইনগুলি মিনি স্ক্রিপ্টটি চালানো এবং তারপরে একটি ইন্টারেক্টিভ শেল শুরু করার জন্য জিনোম-টার্মিনালের ব্যবস্থা করে। যখন জিনোম-টার্মিনালটি প্রস্থান করে, অস্থায়ী স্ক্রিপ্টটি সরানো হয় কারণ জঞ্জালটি শীতল হয় না।

শেষ লাইনটি মিনি স্ক্রিপ্টের অংশ নয়, এটি প্রমাণ করে যে মিনি স্ক্রিপ্টটি কাজ করে। উপরের 11 লাইনের স্ক্রিপ্টটি যদি কোনও ফাইল বলা হয় rt.shতবে chmodএটিগুলি কার্যকর করে তোলে এবং তারপরে এটি কার্যকর করা হয় exec

$ chmod +x rt.sh && ./rt.sh echo hello world

এই সমস্তটির ফলাফল একটি জিনোম টার্মিনাল যা প্রদর্শিত শুরু হবে which

hello world

তার প্রথম লাইনে এবং তারপরে একটি ইন্টারেক্টিভ শেল শুরু হয়:

msw@myhost:~$

আমি মনে করি আপনার স্ক্রিপ্টটি হ্রাস পেয়েছে gnome-terminal -x sh -c "echo hello world; bash", যা আমি মনে করি না যে প্রশ্নটি জিজ্ঞাসা করছে।
ündrük

এটি দুর্দান্ত দেখাচ্ছে। আপনি এখানে কি ঘটতে পারে তা ব্যাখ্যা করতে পারেন?
emf

1
এমফিল্ডস: আমি এটি আপনার জন্য মন্তব্য করেছিলাম।
এমএসডাব্লু

1
আপনি দোলা। টীকাগুলির জন্য ধন্যবাদ, এই জাতীয় সহায়তা স্ক্রিপ্টিং দিয়ে বাধা-থেকে-প্রবেশকে আরও অনেক বেশি অ্যাক্সেসযোগ্য করে তোলে
emf

0

দুটি উত্তর আমি ভাল পছন্দ করেছেন এই ব্যবহার করছেন সমাধান করতে expectএবং এই এক যেখানে তারা ব্যবহার করার প্রস্তাব --init-fileকুঁড়েঘর উভয় পতাকা অথবা যখন টার্মিনাল নির্বাহ:

#!/bin/bash --init-file
commands to run

... এবং এটিকে সম্পাদন করুন:

xterm -e /path/to/script
# or
gnome-terminal -e /path/to/script
# or
the-terminal -e bash --init-file /path/to/script/with/no/shebang

expect সম্ভবত এটিই আরও ভাল সমাধান (কারণগুলির জন্য আমি রূপরেখা করব), এটি আমার লক্ষ্য পরিবেশে ইনস্টল করা আছে কিনা তা আমি নিয়ন্ত্রণ করতে পারি না।

ব্যাশ এর সঙ্গে মধ্যে সমস্যা আমি দৌড়ালাম --init-fileএবং gnome-terminal's --commandএকটি হ্যাক যেমন সমাধানের জন্য এই stdin থেকে অ্যাক্সেস নেই যখন init স্ক্রিপ্ট নির্বাহ শেল হয়। যদি উদাহরণস্বরূপ, আমি এমন কিছু চালাতে চাই যা ব্যবহারকারীর ইনপুট (ftp, টেলনেট, ইত্যাদি) প্রয়োজন তবে প্যারেন্ট শেলটি চালিয়ে যাওয়ার পরে এটি কাজ করবে না; আমি এখন পর্যন্ত কেবলমাত্র এই ব্যতিক্রমটিই দেখেছি এটি হ'ল ssh:

xterm -e /bin/bash --init-file <(echo 'ssh -X some-machine')

... তবে আমার যা দরকার তা এই খেলনার উদাহরণের চেয়ে জটিল। যাইহোক, আমি আশা করি --init-fileজিনিসটি এই প্রশ্নটি পড়ার জন্য কারও পক্ষে দরকারী।


-1

আপনি নতুন পপ আপ টার্মিনালের অভ্যন্তরে একটি কমান্ড চালাতে -eবা -xযুক্তিগুলি ব্যবহার করতে পারেন , তবে এটি আপনি চান ঠিক তা নয়।


বন্ধ, কিন্তু আমি যা খুঁজছি তা বেশ নয় not এই সমস্যাটির জন্য একটি সমস্যা হ'ল কার্যকর ও শেষ হয়ে গেলে টার্মিনালটি তত্ক্ষণাত বন্ধ হয়ে যাবে। সুতরাং, আসুন আমি বলি যে আমি "ls ~ / নোটস" এর শর্টকাট চাই, আউটপুটটি দেখার আগে এটি বন্ধ হয়ে যাবে।
emf

যদি এর কোনও সমাধান হয়, তবে এটি বেশিরভাগ ক্ষেত্রে সমাধান করব।
emf
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.