গ্রোভি সিনট্যাক্স ব্যাকস্ল্যাশগুলির সাথে কাজ করছে না


0

আমি গ্রোভি সিনট্যাক্সের কমান্ড বেলোতে একটি ব্যাকস্ল্যাশ ব্যবহার করার চেষ্টা করছি:

find /path/folder-* -type f -iname "file*" -exec rm -f {} \;

যখন আমি জেনকিনস পাইপলাইনে এই কমান্ডটি তৈরি করার চেষ্টা করি তখন আমাকে এই বাক্য গঠন সম্পর্কে একটি ত্রুটি দেয়। আমার এই কমান্ডটি করার আগেও জেনকিনস ফর্ম ক্ষেত্রে লাল সিনট্যাক্স সহ একটি সতর্কতা রয়েছে যা অপ্রত্যাশিত চর বলে: '\'।

এই ব্যাকস্ল্যাশ দিয়ে ত্রুটি প্রতিস্থাপন বা ঠিক করার জন্য আমি কী করতে পারি?

গ্রোভী আদেশগুলি:

node ("instance") {
    stage ("cleaning folders"){
        sh '''        
        find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
        '''
    }
    stage ("instance1"){
        sh '''
        rm -f /root/logfiles/instance1/*
        echo instance1; 
        scp 100.0.0.50:/var/log/file1.log /root/logfiles/instance1/file1.log;
        scp 100.0.0.50:/var/log/file2.log /root/logfiles/instance1/file2.log;
        '''
    }
    stage ("instance1"){
        sh '''
        rm -f /root/logfiles/instance2/*
        echo instance2; 
        scp 100.0.0.51:/var/log/file1.log /root/logfiles/instance2/file1.log;
        scp 100.0.0.51:/var/log/file2.log /root/logfiles/instance2/file2.log;
        '''
    }
}

বিজ্ঞপ্তি: আমার rm -fকাছে এই মুহুর্তে সমস্ত দৃষ্টান্ত রয়েছে। সব প্রতিস্থাপন করে দেবে rm -fকরার findপর্যায় পরিচ্ছন্নতার ফোল্ডার কমান্ড।

অগ্রিম অগ্রণী


এই হাইব্রিড স্ল্যাশ আপনাকে সাহায্য করবে না? `∖`
গেমার 0

1
আপনি কি দয়া করে আপনার গ্রুভি স্ক্রিপ্ট পোস্ট করতে পারেন (বা পাইপলাইন, বা আপনি যে কমান্ডটি চালাতে ব্যবহার করছেন তা যা কিছু)?
জয়হেনডেন

গ্রোভি স্ক্রিপ্ট প্রশ্নবলে পোস্ট করা হয়েছে। @ জেহেেন্ডেন
মার্লন

যেহেতু স্ল্যাশ অক্ষরটি কেবল নিম্নলিখিতটি থেকে অব্যাহতিপ্রাপ্ত হয়, তাই সম্ভবত আপনার কেবল আইআরটি সরিয়ে ফেলতে হবে।
ডেভিডগো

1
@ ডেভিডগো এই বিশেষ ক্ষেত্রে ব্যাকস্ল্যাশটি নিশ্চিত করে নিশ্চিত করা দরকার যে সেমিকোলনটি শেলটি নয় বরং অনুসন্ধানের মাধ্যমে পার্স করা হয়েছে।
জয়হেনডেন

উত্তর:


4

এটি আপনার পালানোর চরিত্রটিকে এড়াতে সহায়তা করতে পারে, যতটা মজাদার এটি শোনাতে পারে। আপনার ব্যাকস্ল্যাশের সামনে আরও একটি ব্যাকস্ল্যাশ রাখুন:

stage ("cleaning folders"){
    sh '''        
    find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \\;
    '''
}

অন্তত IntelliJ এটিকে সিন্ট্যাক্টিক্যালি ভুল হিসাবে চিহ্নিত করে না।


এটি দুর্দান্ত কাজ করেছে। Tks!
মারলন

2

প্রকৃতপক্ষে আপনার ক্ষেত্রে আমি যথাযথভাবে পালানোর বিষয়টি বুঝতে পারাও চাই না:

stage ("cleaning folders"){
    sh '''        
    find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} +
    '''
}

যখন আপনি একটি সেমিকোলন পাস -execখোঁজ অপারেশন প্রতিটি ফলাফল জন্য, নির্মান একাধিক কমান্ড খুঁজে, এক (যেমন rm -f /root/logfiles/instance/file1.log, rm -f /root/logfiles/instance/file2.log, ...), কিন্তু যখন আপনি একটি প্লাস ব্যবহার করেন, নির্মান একাধিক আর্গুমেন্ট সঙ্গে একটি একক কমান্ড, যা অনেক বেশি কার্যকরী এটি এবং দ্রুত (যেমন rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ...)। আরও বিস্তারিত জানার জন্য ম্যান পৃষ্ঠাটি দেখুন (দুঃখিত আমি এখনই ম্যান পৃষ্ঠাটি উদ্ধৃত করতে বা আরও বিশদ সরবরাহ করতে পারি না; আমি মোবাইলে রয়েছি)।


কমান্ড লাইনটি কত দীর্ঘ হতে পারে তার একটি সীমা রয়েছে। সুতরাং আপনার যদি প্রচুর ফাইল থাকে তবে সাবধান হন।
জিওভান্নি তিরলনি

1

একটি সমাধান হ'ল ডলার স্ল্যাশি ব্যবহার করা যা স্ট্রিং ইন্টারপোলেশন অক্ষম করে এবং এস্কেপ চরটিকে $ এ পরিবর্তন করে $

stage ("cleaning folders"){
    sh script: $/
    find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
    /$
}

0

আপনি নিম্নলিখিত মত কিছু ব্যবহার করতে পারেন $/ yor backscalsh file path /$। উদাহরণ স্বরূপ:

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