কমান্ড-লাইনের মাধ্যমে কীভাবে আমি জিইউআই ডায়ালগ বক্স সহ ব্যবহারকারীদের ফাইল / ডিরেক্টরি পথ চয়ন করতে অনুরোধ করব?


16

ধরুন আমার কাছে এর মতো স্ক্রিপ্ট রয়েছে:

(উদাহরণটিতে রিসাইক ব্যবহারের চিত্র চিত্রিত হয়েছে)

#!/bin/bash
echo -n "Enter Source Directory:"
read srcdir
echo -n "Enter Destination Directory:"
read dstdir
rsync -av --delete "$srcdir" "$dstdir"

এখানে ধারণাটি হল ব্যবহারকারীকে "সোর্স" এবং "গন্তব্য" ডিরেক্টরিগুলি আরএসইএনসি-র সাথে কাজ করার জন্য প্রম্পট করার জন্য। যেমনটি হয়, ব্যবহারকারীকে কমান্ড-লাইনের মাধ্যমে ম্যানুয়ালি প্রবেশ করতে হবে /path/to/directory/

পরিবর্তে , আমি GUI ইন্টারফেসের মাধ্যমে পাথগুলিতে প্রবেশ করতে ব্যবহারকারীকে অনুরোধ করতে চাই ।

এটার মতো কিছু: screem


জিইউআই নির্বাচন উইন্ডো দিয়ে কমান্ড-লাইনে ফাইলের পথটি ফেরত দেওয়ার জন্য ব্যবহারকারীকে প্রম্পট করতে আমি কমান্ডগুলি ব্যবহার করতে পারি ?


2
আপনি Zenity ব্যবহার করতে পারেন: help.gnome.org/users/zenity/stable/file-selection.html.en
টুকসন

4
জিইউআই উইন্ডো ব্যবহার সম্পর্কে সতর্কতা যোগ করতে দয়া করে মনে রাখবেন। অপ্রয়োজনীয় উইন্ডো পপিং করা উন্নত ব্যবহারকারীদের উপর ক্রোধ প্ররোচিত করতে পারে।
unPress325680

5
কেন, ওহে আপনি কেন কখনও এমন বিরক্তিকর "বৈশিষ্ট্য" প্রয়োগ করতে চান? মনে রাখবেন যে আমরা যদি কমান্ড লাইনে ডিরেক্টরিগুলি প্রবেশ করি তবে আমরা ট্যাব সমাপ্তিটি ব্যবহার করতে পারি এবং কিছু গুই লোড হওয়ার জন্য অপেক্ষা করতে হবে না। যে কেউ কেন পুরোপুরি ভাল শেল স্ক্রিপ্টে একটি জিইউআই যুক্ত করতে চায় তা আমার বাইরে।
টেরডন

1
যেহেতু আমরা প্যারাডাইমগুলি মিশ্রণ করছি, তবে কোনও ওয়েব অ্যাপের মাধ্যমে ব্যবহারকারীর ইনপুট পাচ্ছেন না কেন?
তুলাইনস কর্ডোভা

4
@terdon কারণ যদি আমরা সরাসরি স্ক্রিপ্টটি চালিত করি & টার্মিনালে চালিত না হয় তবে আমি জিইউআই উইন্ডো সরবরাহ করতে চাই।
পান্ড্য

উত্তর:


34

আপনি এটি ফাইলগুলির জন্য ব্যবহার করতে পারেন:

zenity --file-selection

এবং এটি ফোল্ডারগুলির জন্য:

zenity --file-selection --directory

ব্যবহারের জন্য, চালান:

zenity --help-general
zenity --help-file-selection

সাধারণত এটি আমার থিমের (যাহাই হউক না কেন জিটিকে উইন্ডো পরিচালকদের জন্য) মেলে, আমার মেশিনে জুকিটো ৩.৮-র পরিবর্তিত সংস্করণটির সাথে এটির মতো দেখাচ্ছে:

এটির ব্যবহারের একটি উপায় হ'ল:

echo "you selected $(zenity --file-selection)"

যার ফলস্বরূপ হবে you selected /path/to/file

আপনি একটি উপযুক্ত শিরোনাম সেট করতে বিকল্পগুলিও ব্যবহার করতে পারেন, এবং ডিরেক্টরিটি এটিতে শুরু হয় - আপনার rsync ব্যবহারের ক্ষেত্রে, উদাহরণস্বরূপ:

zenity --file-selection --directory --title="Choose rsync source directory" --filename=$HOME/Desktop/

ফাইলগুলির জন্য, আপনি একটি ফাইল টাইপ বাছাই করতে নির্দিষ্ট করতে পারেন - যেমন:

zenity --file-selection --file-filter='PDF files (pdf) | *.pdf' --title="Select a PDF file"

দ্রষ্টব্য: আপনি YAD ব্যবহার করতে পারেন, জেনিটির কাঁটাচামচ যা আরও বেশি বৈশিষ্ট্যযুক্ত।

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad

সূত্র

বেশিরভাগ অংশের জন্য আপনি এটি একইভাবে ব্যবহার করতে পারেন - ফাইল ব্রাউজারের জন্য:

yad --file-selection

এবং সহায়তা পৃষ্ঠার জন্য:

yad --help-all

যদিও সেই সময়ে (সংস্করণের প্রায় ২ around? 0


2
ইয়াদ জেনটির নাটকীয়ভাবে বর্ধিত কাঁটাচামচ এবং জেনিটি প্রকল্পটি নিষ্ক্রিয় হওয়ার পরে এটি মূলত প্রতিস্থাপন করেছে। আমি দেখতে পাচ্ছি যে জেনিটি এখন Gnome.org (কেবলমাত্র জিনোম 3?) এ বিকাশে ফিরে এসেছে তবে আমি এটিকে ডাউনলোড করার কোনও উপায় দেখতে পাচ্ছি না।
ডকসালভেজার

@ ডকসালভেজ - সেই পৃষ্ঠাটি বেশ প্রাচীন - এটি পরবর্তী প্রকাশে '3.2' বলেছে - আমার এখনকার মোটামুটি পুরানো ফেডোরা 19 সিস্টেমের সংস্করণ 3.8 রয়েছে (জিনোম 3.8 সহ - জিনোমের কয়েকটি বিট জিনোম শেলের প্রতিটি সংস্করণের জন্য আপডেট করা হয়েছে) সুতরাং এটি সম্ভবত 3.10 + 3.12 এর জন্য আপডেট করা হয়েছে)। এটি সর্বশেষ 2005-2009-র বাগ রিপোর্টগুলি নিয়ে কাজ করে। - তুমি উবুন্টু Repos থেকে সর্বশেষ স্থিতিশীল সংস্করণ (3.8 আবার) পেতে পারেন packages.ubuntu.com/trusty/zenity । আপনি এখানে ইয়াদের সংকলিত সংস্করণগুলি সন্ধান করতে সক্ষম হবেন ।
উইল্ফ

ইয়াদ দেখতে বেশ ভাল দেখাচ্ছে - এতে জেনেনিটির চেয়ে বেশি বিকল্প রয়েছে :)
উইল্ফ

1
@ উইলফ হ্যাঁ, ইয়াদটি স্টেরয়েডগুলিতে জেনিটি। একবার আপনি এটিকে আঁকড়ে ধরলে তা নমনীয় হয়ে ওঠে। আমি একজন ধর্মান্তরিত আমি নীচে ওপিএস প্রশ্নের জবাব দিয়েছি (বিস্মৃত করতে পারছি না, দুঃখিত) বিটিডব্লিউ।
স্কুবি -2

@ স্কুবি -২ শীতল উত্তরগুলির জন্য ইনস্টল করার নির্দেশাবলী যুক্ত করেছেন (যাতে ভবিষ্যতের ব্যবহারকারীদের মন্তব্য করতে হবে না)
উইল্ফ

19

কেবল রেকর্ডের জন্য, আপনি dialogকোনও পাঠ্য-ভিত্তিক ব্যবহারকারী ইন্টারফেস (টিইউআই) সমাধানের জন্য ব্যবহার করতে পারেন ।

বাক্য গঠন:

dialog --title "text" --fselect /path/to/dir height width

উদাহরণ:

FILE=$(dialog --stdout --title "Please choose a file" --fselect $HOME/ 14 48)
echo "${FILE} file chosen."

আউটপুটটি এরকম কিছু হবে:

উদাহরণ

@ উইল্ফ দ্বারা নির্দেশিত হিসাবে, আপনি টার্মিনালটি পূরণ করতে এটি $LINESএবং $COLUMNSভেরিয়েবলগুলি ব্যবহার করতে পারেন :

$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))

1
যদিও এটি সঠিক বিকল্প সমাধান তবে এটি জিওআই উইন্ডো সরবরাহ করে না যেমনটি উল্লিখিত হয়েছে!
পান্ড্য

2
আমি জানি, তবে অন্য কারও পক্ষে এটি দরকারী হতে পারে। আমি কোনও বিভ্রান্তি এড়াতে স্ক্রিনশট পোস্ট করেছি।
kraxor

7
এবং, সত্যি বলতে, এটি জিইউআই আইএমএইচও হিসাবে যোগ্যতা অর্জন করে।
kraxor

3
জিইউআই এবং টিইউআই (পাঠ্য UI) এর মধ্যে সাধারণত ব্যবহৃত লাইনটি "পরমাণুর" আকার: এটি পিক্সেল বা একটি চরিত্র?
unPress325680

3
উত্তম উত্তর - কিছু টার্মিনালের প্রস্থ এবং উচ্চতা যেমন চলকগুলি দ্বারা সংজ্ঞায়িত করা হয় $LINESএবং $COLUMNS- তাই আপনি $(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))এটি টার্মিনাল / স্ক্রিন উইন্ডোটি পূরণ করতে চালিত হন।
উইলফ

5

আমি জানি এটি 8 মাস পুরানো এবং এটিও ওপি-র প্রশ্নের উত্তর দেওয়া হয়েছে। তবে ইয়াদ উল্লেখ করা হয়েছে তবে এর উদাহরণ দেওয়া হয়নি। ইয়াড ব্যবহার করে আমার সমাধানটি এখানে।

DIR="/home" \
i=0;for location in source destination
do
((i++));selection[$i]=$(yad --center \
--width 350 \
--form \
--title="yad example" \
--text="Select $location directory" \
--field=:LBL "" \
--field=Path:DIR "$DIR" \
--separator='' )
done;\
echo "Command to run is \"rsync -av --delete ${selection[1]} ${selection[2]}\""

এটি যেভাবে কাজ করে তা এই জাতীয়। আমরা লুপ জন্য একটি মধ্যে Yad করা পরিবর্তনশীল সেটিং $locationথেকে sourceপ্রথম পাস এবং destinationসেকেন্ডের জন্য। আউটপুট অ্যারেতে স্থাপন করা হয় selection[]যার জন্য চলকটি iসূচক হিসাবে ব্যবহৃত হয়। এটি শুরুতে 0 এ সেট করা হয় এবং প্রতিটি পাসের সাথে বর্ধিত হয়। সুতরাং উত্স হিসাবে ${selection[1]}এবং গন্তব্য হিসাবে সংরক্ষণ করা হয় ${selection[2]}

প্রথম লাইনে থাকা ডিআইআর = "/ হোম" ডায়ালগটি ডিফল্ট সেট করে। টাইপ করে টার্মিনাল থেকে yad কমান্ড বিকল্পগুলি পাওয়া যাবে yad --help

ইয়াড স্ক্রিনশট


2

উত্তরের সংক্ষিপ্ততম (এবং সেরা) সমাধানটি এখানে রয়েছে: Yadঠিক যেমনটি zenityকরে ঠিক বিকল্পটি সরবরাহ করে:

yad --file-selection --directory

এটি একটি ডিরেক্টরি নির্বাচন সংলাপ খোলে। অতিরিক্ত যুক্তি ছাড়াই এটি --directoryপরিবর্তে ফাইল নির্বাচন সংলাপ হবে।

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