কেন এই উইন্ডোজ ব্যাচ ফাইলের প্রথম লাইনটি চালানো হয় তবে তিনটি লাইনই কমান্ড শেলের মধ্যে কার্যকর হয়?


171

আমার একটি ব্যাচের ফাইল রয়েছে যা একের পর এক তিনটি ম্যাভেন কমান্ড কার্যকর করে। প্রতিটি কমান্ড সফলভাবে স্ক্রিপ্টে সম্পাদিত হতে পারে - নিজেই !. কিন্তু যখন আমি একই ফাইলটিতে তিনটি কমান্ড যুক্ত করি, তখন স্ক্রিপ্টটি প্রস্থান হওয়ার আগে কেবল প্রথমটি কার্যকর করা হয়। কোন ধারণা কেন?

mvn install:install-file -DgroupId=gdata -DartifactId=base -Dversion=1.0 -Dfile=gdata-base-1.0.jar  -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=gdata -DartifactId=blogger -Dversion=2.0 -Dfile=gdata-blogger-2.0.jar  -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=gdata -DartifactId=blogger-meta -Dversion=2.0 -Dfile=gdata-blogger-meta-2.0.jar  -Dpackaging=jar -DgeneratePom=true

এছাড়াও, আমি যদি তিনটি কমান্ড অনুলিপি করে কমান্ড শেল (cmd.exe) এ আটকান, তারা কোনও সমস্যা ছাড়াই একের পর এক চালিত করে। সুতরাং এটি স্পষ্টতই ডস ব্যাচ ফাইলটি নিয়ে কিছু সমস্যা।


2
কী সমঝোতা: আমি আমার ব্যাচের ফাইলে একই সমস্যা এবং একই কমান্ড নিয়ে এখানে এসেছি - "এমভিএন ইনস্টল: ইনস্টল-ফাইল" এর একাধিক লাইন: ডি
ফিশবোন


1
@ ফিশবোন এবং কাকতালীয়ভাবে আপনার এবং ওপি উভয়েরই 1.3k খ্যাতি রয়েছে ..
p_champ

উত্তর:


297

মাভেন তার ব্যাবসা করতে ব্যাচ ফাইলগুলি ব্যবহার করে। যে কোনও ব্যাচের স্ক্রিপ্টের সাথে, আপনাকে অবশ্যই callকমান্ডটি ব্যবহার করে অন্য স্ক্রিপ্টটি কল করতে হবে যাতে কল করা স্ক্রিপ্টটি সম্পূর্ণ হওয়ার পরে এটি আপনার স্ক্রিপ্টে ফিরে যেতে জানে। callসমস্ত কমান্ডে প্রিপেন্ডিং চেষ্টা করুন ।

অন্য একটি জিনিস আপনি চেষ্টা করতে পারেন হ'ল startআদেশটি একইভাবে কাজ করা উচিত।


1
আমি antউইন্ডোজ ব্যাচ ফাইলগুলির ভিতরে আগে রেখেছি এবং কার্যকর করার জন্য callপ্রয়োজনীয় ছিল antcallব্যাচ ব্যতীত প্রথম কমান্ডের পরে থামবে, সুতরাং দ্বিতীয় দুটি কার্যকর হচ্ছে না। মাইক্রোসফ্ট / call
ওভেন

22
startএকটি নতুন উইন্ডো ছড়িয়ে পড়বে এবং তিনটি কমান্ডের প্রতিটি সমান্তরালে চলবে। আপনার যদি সিঙ্ক্রোনালি চালানোর প্রয়োজন হয় তবে ব্যবহার করুন call
akf

11
স্ক্রিপ্টিং পরিবেশটি এভাবে আচরণ করা পৃথিবীতে কীভাবে বোঝায়? আমি যদি দুটি কমান্ড সহ কোনও স্ক্রিপ্ট লিখে থাকি তবে আমি কমান্ডগুলি কার্যকর করার আশা করি; আমি আশা করি না যে পরিবেশটি কেবল আমার স্ক্রিপ্টটি সম্পাদন বন্ধ করার সিদ্ধান্ত নেবে কারণ কেবলমাত্র সেই কমান্ডগুলির মধ্যে একটি স্ক্রিপ্ট হিসাবেই প্রয়োগ করা হবে।
bames53

3
@ বেমস ৫৩: এটি ডস থেকে উদ্ভূত একটি সীমাবদ্ধতা যা উইন্ডোজে কমান্ড প্রম্পটের আধুনিক প্রয়োগের দিকে নিয়ে যায়। যেহেতু মাইক্রোসফ্টের লক্ষ্যগুলি পশ্চাদপদ সামঞ্জস্য বজায় রাখা ছিল, এটিই ফলাফল।
জেফ মার্কাডো

2
যোগ call pause(উদ্ধৃতিগুলি ছাড়াই) শেষে আপনি cmd ওপেন করুন উইন্ডোজ রাখতে চান তাহলে
JinSnow

28

callসাহায্য করা হচ্ছে । তবে আজ তা হয়নি।

এইভাবে আমি এটি সমাধান করেছি:

ব্যাট ফাইলের বিষয়বস্তু (যদি আপনি কোনও ব্যাটারি থামাতে চান যখন সেমিডস ত্রুটিগুলির মধ্যে একটি হয়)

cmd1 && ^
cmd2 && ^
cmd3 && ^
cmd4

ব্যাট ফাইলের বিষয়বস্তু (যদি আপনি কোনও ব্যাটার চালিয়ে যেতে চান সেমিডসির কোনও ত্রুটি থাকলে)

cmd1 & ^
cmd2 & ^
cmd3 & ^
cmd4

(এখানে প্রথম উদাহরণটি cmd1 && cmd2 && cmd3 && cmd4মূলত সমস্ত কমান্ডকে এক লাইন তৈরি করার সমতুল্য ))
বেন গোট

2
সত্য। আমি এটি সেভাবে লিখেছি কারণ একটি ব্যাট ফাইল, বেশিরভাগ ক্ষেত্রে আপনার একাধিক, সম্ভবত দীর্ঘ কমান্ড থাকবে, একটি লাইনে 4 টি কমান্ড ভবিষ্যতের রক্ষণাবেক্ষণে ভাল হবে না। পাঠ্যযোগ্যতা ভাল প্রোগ্রাম লেখার মূল বিষয় এবং তাই তারা বিভিন্ন লাইনে রয়েছে।
মনোহর রেড্ডি পোরেডি

1
এই সমাধানটি আমার পক্ষে কৌশলটি করেছে। callসমাধান ত্রুটি এ বাঁধন ছিল না, এই এক না।
টিম

9

একটি স্ক্রিপ্ট থেকে আরও মাভেন বিল্ডগুলি সম্পাদন করতে আপনি নিম্নলিখিত পদ্ধতিতে উইন্ডোজ কল ফাংশনটি ব্যবহার করতে পারবেন :

call mvn install:install-file -DgroupId=gdata -DartifactId=base -Dversion=1.0 -Dfile=gdata-base-1.0.jar  -Dpackaging=jar -DgeneratePom=true
call mvn install:install-file -DgroupId=gdata -DartifactId=blogger -Dversion=2.0 -Dfile=gdata-blogger-2.0.jar  -Dpackaging=jar -DgeneratePom=true
call mvn install:install-file -DgroupId=gdata -DartifactId=blogger-meta -Dversion=2.0 -Dfile=gdata-blogger-meta-2.0.jar  -Dpackaging=jar -DgeneratePom=true

1

এটি এমন হওয়া উচিত যে নির্দিষ্ট mvnকমান্ডটি execএস এবং ফিরে না আসে, এর ফলে বাকী কমান্ডগুলি কার্যকর না করে।


পরবর্তী mvnকমান্ডটি কার্যকর করতে স্ক্রিপ্টকে বাধ্য করার কোনও উপায় আছে কি ?
উইকি

1

নিম্নলিখিত ব্যাচ ফাইলটি লেখার চেষ্টা করুন এবং এটি সম্পাদন করুন:

Echo one
cmd
Echo two
cmd
Echo three
cmd

শুধুমাত্র প্রথম দুটি লাইন কার্যকর করা হয়। আপনি যদি কমান্ড প্রম্পটে "প্রস্থান" টাইপ করেন তবে পরবর্তী দুটি লাইন প্রক্রিয়া করা হবে। এটি অন্য একটি শেল লোড হচ্ছে।

আপনার স্ক্রিপ্টে এটি ঘটছে না তা নিশ্চিত হওয়ার জন্য, প্রথম কমান্ড শেষ হলে কেবল "প্রস্থান" টাইপ করুন।

আছে HTH!


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