প্রত্যাশিত স্ক্রিপ্টটিতে ফাইল কাজ করছে না


1

আমি হোস্টের ফাইলনেমে কোনও নির্দিষ্ট লাইন বিদ্যমান কিনা তা খতিয়ে দেখার চেষ্টা করছি। সুতরাং যদি গ্রেপ কমান্ড থেকে নির্দিষ্ট প্যাটার্নটি পাওয়া যায় তবে একটি ডামি.টিএসটিএসটি তৈরি করা হবে। তারপরে আমি dummy.txt একটি শর্ত হিসাবে উপস্থিত কিনা এবং তা এগিয়ে যেতে চাই exists

তবে যদিও ডামি.এসটিএক্সটি তৈরি হচ্ছে এটি যদি বিবৃতি দ্বারা পাওয়া যায় না:

if {[file exists $fileName] }

এবং নিয়ন্ত্রণটি অন্য ব্লকে স্থানান্তরিত হয়। এর কারণ কী হতে পারে? আমি যা চেষ্টা করছি তা অর্জনের জন্য কি আরও সহজ পদ্ধতি আছে?

 set Host [lindex $argv 0 ]
 spawn ssh -o StrictHostKeyChecking=no userid@$Host
 expect "*assword*"
 send "password\n"
 expect "+"
 send "cd path/that/contains/filename\n"
 expect "*$*"
 send "pwd\n"
 set fileName dummy.txt
 send {grep '\[abc\]' filename | wc -l | { read line; [ "$line" != "0" ] && echo "$line"> dummy.txt; }}
 send "\n"
 expect "+"
 send {grep 'xyz' filename | wc -l | { read line; [ "$line" != "0" ] && echo "$line"> dummy.txt; }}
 send "\n"
 expect "+"
 send "chmod 777 dummy.txt\n"
 if {[file exists $fileName] } {

   send {printf "\nabc xyz already exists"} 
   send "\n"
   expect "+"
   send "ls -l\n"
   expect "+"
   send "rm dummy.txt\n"
   expect "+"
   send "ls -l\n"
   expect "+"
        send "exit\n"
  } else {
        send {printf "cannot find $fileName"}
   send "\n"
   expect "+"
   send {printf "\n[abc]\nxyz\n" >> filename}
   send "\n"
   expect "+"
   send "cat filename\n"
   expect "+"
    send "exit\n"

    }

এর পরিবর্তে wc | read ...আপনি কেবল গ্রেপের রিটার্ন কোডটি পরীক্ষা করতে পারেন (০ টি মিল খুঁজে পাওয়া গেছে, দেখুন man grep)।
অট--

উত্তর:


1

if {[file exists $fileName] }ফাইলটি স্থানীয় সিস্টেমে উপস্থিত রয়েছে কিনা তা যাচাই করবে (যেটি expectচলছে সেখানে ) তবে শর্তসাপেক্ষে তৈরি ফাইলটি sshযদি উপস্থিত থাকে তবে এটি রিমোট হোস্টে (স্ক্রিপ্টটি লগইন করে এমন একটি ফাইল ) উপস্থিত থাকবে। এছাড়াও, filenameহয় dummy, তবে শর্তাধীন তৈরি ফাইলটি dummy.txt


দুঃখিত স্কট যে একটি টাইপ ছিল। সর্বত্র এর dummy.txt। এটি যদি রিমোট মেশিনে পরীক্ষা করে থাকে তবে আমি কীভাবে এটি হোস্টের সাথে চেক করব? আমি কোনও ফাইলে নির্দিষ্ট লাইন যুক্ত করার প্রক্রিয়াটি স্বয়ংক্রিয় করার চেষ্টা করছি, তবে একই সাথে যদি সেই রেখাগুলি ইতিমধ্যে বিদ্যমান থাকে তবে আমি সদৃশ এন্ট্রি চাই না, এ কারণেই আমি গ্রেপ এবং ডামি.এসটিএক্সটি ব্যবহার করছি
user417721

প্রশ্নের টাইপ ঠিক করার জন্য ধন্যবাদ। তবে, যতক্ষণ আপনি প্রশ্নটি সম্পাদনা করছেন, আপনার এটিকে আরও পরিষ্কার করা উচিত। আমি আপনার মন্তব্য সম্পূর্ণ বুঝতে পারি না। আপনি যদি রিমোট হোস্টের অবস্থার (গুলি) ভিত্তিতে রিমোট হোস্টে শর্তাধীন কিছু করতে চান তবে কেবল এটি শেল স্ক্রিপ্ট হিসাবে মনে করুন এবং শেল লজিক ব্যবহার করুন; যেমন send {grep -q xyz filename || echo xyz >> filename},।
স্কট

আমার কাছে এমন কিছু বিষয়বস্তু যুক্ত করা দরকার, যেটি রিমোট হোস্টের ফাইলের নামটিতে xyz abc রয়েছে। তবে আমি যাচাই করতে চাই যে সেই xyz abc ফাইলের নামতে ইতিমধ্যে উপস্থিত রয়েছে। এটি যাচাই করতে আমি প্রেরণ করুন {grep '[abc]' ফাইলের নাম | wc -l | {পড়ার লাইন; ["$ লাইন"! = "0"] && প্রতিধ্বনি "$ লাইন"> dummy.txt; }} "\ n" প্রত্যাশা "+" প্রেরণ করুন send গ্রেপ 'xyz' ফাইলের নাম | wc -l | {পড়ার লাইন; ["$ লাইন"! = "0"] && প্রতিধ্বনি "$ লাইন"> dummy.txt; }} "} n" প্রেরণ করুন সুতরাং xyz abc যদি ফাইলনামে উপস্থিত থাকে তবে একটি নতুন ফাইল ডামি.টিএসটি তৈরি হয়। সুতরাং যদি ডামি.টিএসটিএসটি রিমোটে বিদ্যমান থাকে যার অর্থ xyz এবং abc ফাইলনেমে উপস্থিত থাকে এবং স্ক্রিপ্টটিকে আবার যুক্ত করার দরকার নেই
user417721

আমি জানি এটি কিছুটা লম্বা মনে হচ্ছে তবে আমি ইন্টারঅ্যাকশনটি ব্যবহার করার কারণে এটি সম্পাদন করার সহজতর উপায় সম্পর্কে ভাবতে পারি না। যদি আপনি রিমোট হোস্টে ফাইলটি পরীক্ষা করার কোনও সমাধান বা এই পুরো জিনিসটি কাজ করার সহজতর কোনও
উপায়ের পরামর্শ দিতে পারেন তবে

send {[ -f dummy.txt ] && echo "xyz abc" >> filename}। অথবা আমার সাম্প্রতিক মন্তব্যটি আবার পড়ুন।
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.