আমার কমান্ড এবং এর ফলাফল আটকানোর জন্য কমান্ড


9

প্রায়শই আমি গিথুব বাগের মতো কিছু পোস্ট করতে চাই

$ ping google.com
PING google.com (216.58.195.238): 56 data bytes
Request timeout for icmp_seq 0
64 bytes from 216.58.195.238: icmp_seq=0 ttl=53 time=1064.747 ms

এই মুহূর্তে আমি কমান্ড চালানোর জন্য ব্যবহার screen's C-a C-[এলাকায় হাইলাইট করতে, enterযে বাফার এটি অনুলিপি করতে, এটি পেস্ট vim, এটি একটি ফাইলে লিখতে এবং তারপর catযে মধ্যে pbcopy। এখানে অবশ্যই একটি ভাল রাস্তা আছে।

আমি চালাতে পারি এমন কোন কমান্ড আছে যা teeআমি টাইপ করা কমান্ডটি একটি $এবং সমস্ত আউটপুট প্রিফিক্স করা হবে pbcopy? নাকি কাছের কিছু? আমি কল্পনা

$ demo ping google.com
PING google.com (216.58.195.238): 56 data bytes
Request timeout for icmp_seq 0
64 bytes from 216.58.195.238: icmp_seq=0 ttl=53 time=1064.747 ms
^C
$

এবং এখন আমি আটকানো আসল জিনিসটি আমার ম্যাক ক্লিপবোর্ডে রয়েছে।


এটি কি ওএস এক্সের সাথে নির্দিষ্ট?
পিএইচকে

নাঃ। অন্যান্য প্ল্যাটফর্মের একটি ফাইল থেকে একটি ক্লিপবোর্ডে সরানোর জন্য আপনি যে কোনও ইউটিলিটি ব্যবহার করেন তা প্রতিস্থাপন করা যেতে পারে pbcopyএবং এটি একই প্রশ্ন।
পল টারজান

2
কৌতূহলী: আপনি মাউসটি ব্যবহার করবেন না কেন?

2
আপনি পুরো ভিএম অংশটি ছেড়ে দিতে পারেন। সহজভাবে চালান pbcopyএবং C-a C-]তার স্টিন।

@ মাউসটি ব্যবহার করা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ভাল হয় না এবং পাঠ্যটির জন্য একাধিক স্ক্রিন পাওয়া যায়
পল টারজান

উত্তর:


10

একটি বিকল্প হ'ল -xকমান্ডটি চালিত সাব-শেলের মধ্যে ট্রেসিং (সহ ) সক্ষম করা । এটি এসটিডিআরআর এবং কমান্ডটি STDOUT এ লিখে দেয়। উভয় এবং পাইপ সংগ্রহ করুন pbcopy:

$ ( set -x; ping -c 3 google.com ) 2>&1 | pbcopy

$ pbpaste
+ ping -c 3 google.com
PING google.com (173.194.217.138): 56 data bytes
64 bytes from 173.194.217.138: icmp_seq=0 ttl=44 time=37.436 ms
64 bytes from 173.194.217.138: icmp_seq=1 ttl=44 time=38.891 ms
64 bytes from 173.194.217.138: icmp_seq=2 ttl=44 time=39.329 ms
--- google.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 37.436/38.552/39.329/0.809 ms

set -xএকটি আকর্ষণীয় পদ্ধতির হয়। ভাল বিক্ষোভ!
ডোপঘোতি

আমিও দেখতে আমার আদেশ খুব (বিশেষ 2 টি পৃথক স্ট্রিম এখনও দিকে) আউট মুদ্রিত ভালোবাসতাম, আর চাই +হতে$
পল Tarjan

1
@ পল্টার্জন: তারপরে PS4 পরিবর্তন করুন। একটি উদাহরণস্বরূপ (আপনি কি প্রয়োজন, কিন্তু শো কিছু সম্ভাব্য অপশন না): PS4='\\$ ${BASH_SOURCE[0]:-inherited}:line ${LINENO}:${FUNCNAME[0]:+${FUNCNAME[0]}(): } '। "\\ $" "$" কে প্রথম চর তৈরি করে এবং সেই চরটি কলটির স্তরটি দেখানোর জন্য পুনরাবৃত্তি হয়। (first প্রথম স্তরের জন্য, second দ্বিতীয় স্তরের জন্য, ইত্যাদি)
অলিভিয়ার ডুলাক

7

scriptআপনার প্রম্পট, কমান্ড এবং এর আউটপুট সহ পুরো ইন্টারঅ্যাকশন ক্যাপচারের জন্য আপনি ইউটিলিটিটি ব্যবহার করতে পারেন :

script temp.log; cat temp.log | pbcopy
[ do stuff ]
[ end the interaction with ^D or logging out of the shell ]

এরপরে আপনি ফাইলটি পর্যালোচনা করতে পারেন এবং এর সামগ্রীগুলি ইতিমধ্যে আপনার ক্লিপবোর্ডে থাকবে।

আপনি এটিও করতে পারেন:

script temp.log 'somecommand'; cat temp.log | pbcopy

এটি কাছে। $ এটিতে আমার পুরো প্রম্পটটি অন্তর্ভুক্ত ছিল যেখানে আমি কেবল একটি চাই এবং এটি আমাকে কেবলমাত্র একটি কমান্ড করতে দেয় এবং এটি একটি শিরোনাম এবং পাদচরণ যোগ করতে চায় না adds
পল টারজান

1
আমার মনে হয় না এটি এএনএসআই সিকোয়েন্সগুলি দমন করতে পারে (যেমন নকশা অনুসারে এটি পুরো সেশনটি ক্যাপচার করতে পারে) তবে আপনি শিরোনামকে দমন করতে পারেন। জন্য ম্যান পৃষ্ঠা পরীক্ষা করুন -q। আপনি sedএএনএসআই কোডগুলি sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
ফেলাতে

2
আপনি script temp.log env PS1='$ ' bash --norcযে প্রম্পটটি চান তা দিয়ে ব্যাশ পেতে ব্যবহার করতে পারেন। বিকল্পভাবে আপনি ~/.bashrcব্যবহারের জন্য যাচাই scriptকরতে এবং প্রম্পটটি পরিবর্তন করতে সম্পাদনা করতে পারেন :[ $(ps -o command= -p $PPID) = 'script' ] && PS1='$ '
এরিক


1

অন্য উত্তরে আপনার মন্তব্য থেকে , আপনি চান না যে আপনার সম্পূর্ণ প্রম্পটটি অনুলিপি করা হবে, তবে কেবল $

আমি কীভাবে এটি সমাধান করব তা সহজভাবে:

16:54:53 [myname mydirectory] 535 $ bash
bash-3.2$ PS1='\$ '
$ echo some command
some command
$ exit
exit
16:57:17 [myname mydirectory] 536 $

সহজ। তারপরে আমি মাউসটি প্রম্পট, কমান্ড এবং আউটপুটটি অনুলিপি করতে এবং অনুলিপি করতে ব্যবহার করতে চাই।


অন্যরকম ব্যবহারের ক্ষেত্রে যেখানে আমি কেবল কমান্ড চাইছি, তার আউটপুট নয় এবং প্রম্পট নয়, কাউকে নির্দেশনা দিতে সক্ষম হবার জন্য, আমি একটি কপিরাইট অনুলিপি করতে , একটি উপনাম স্থাপন করেছি zv(কীবোর্ডে "কমান্ড ভি" এর কাছাকাছি) আমার ক্লিপবোর্ডে শেষ কমান্ড :

alias zv='printf %s "$(history -p \!\!)" | pbcopy'

ক্লিপবোর্ডের printfউপরের ট্রেলিং নতুনলাইনটি অন্তর্ভুক্ত না করার জন্য এবং কমান্ড প্রতিস্থাপনের ব্যবহারটি নোট করুন history


0

এই মুহূর্তে আমি কমান্ডটি চালাচ্ছি, স্ক্রিনের সি সি- ব্যবহার করুন [অঞ্চলটি হাইলাইট করতে, সেই বাফারে এটি অনুলিপি করতে লিখুন,

আপনি যদি ইতিমধ্যে ব্যবহার করেন তবে GNU screenআপনি সরাসরি কোনও বাহ্যিক সরঞ্জাম ব্যবহার করে একটি নির্বাচন অনুলিপি করতে পারেন। উদাহরণস্বরূপ, আমি ~/.screenrcএটি লিনাক্সে যুক্ত করেছি:

bind b eval writebuf 'exec /bin/sh -c " xsel -i </tmp/screen-exchange"' 'exec /bin/sh -c "killall xsel"'

এখন আমি একটি নির্বাচন wih চিহ্নিত করতে পারেন Control- a [, প্রেস Spaceএবং এখন প্রেস Control- a bচালানোর জন্য xsel। এটি আমার ধারণা নয়, এটি আসলে বেশ সাধারণ । মনে রাখবেন যে কিছু লোক এটির pbcopyপরিবর্তে এটি ব্যবহার করেxsel যাতে এটি কোনও সমস্যা ছাড়াই আপনার পক্ষে কাজ করতে পারে।

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