আমি কেন পাই [[: স্ক্রিপ্ট চালানোর সময় খুঁজে পাওয়া যায় না?


15

আমি এমন একটি স্ক্রিপ্ট লেখার চেষ্টা করছি যাতে ফাইল উপস্থিত রয়েছে কিনা তা যাচাই করতে হবে। কনসোলে আমি লিখি

if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

এবং আমি পেতে

not mod

কিন্তু যখন আমি একই জিনিসটি করার জন্য একটি স্ক্রিপ্ট লিখি:

#!/bin/sh
if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

এবং তারপরে স্ক্রিপ্টটি কার্যকর করুন, আমি এটি পেয়েছি:

./ex.sh: 2: [[: not found
mod

আমি বর্তমান ডিরেক্টরিতে স্ক্রিপ্টটি সংরক্ষণ করেছি এবং এর নাম রেখেছি ex.sh, তারপরে আমি নিশ্চিত করেছিলাম এটি কার্যকর হয়। স্ক্রিপ্ট কল করতে আমি এটি করি:

./ex.sh

আমার কেন এই সমস্যা হচ্ছে? আমি ইতিমধ্যে অনেক কিছুই চেষ্টা করেছি:

if [ -a /home ...

এবং

if test -a /home ...

দুজনেই ফিরে আসে

13: -a: unexpected operator

আমি এটি কাজ করতে সক্ষম হয়েছি, তবে তার জন্য আমাকে প্রথম লাইনটি সরিয়ে ফেলতে হয়েছিল (#! / বিন / শ) আপনি কেন জানেন কেন এটি ঘটে?
বুজু

চেষ্টা করুন#!/bin/bash
কেভ

হ্যালো কেভ, আমি সেটিকেও রিলায়্ট করেছি। আমি সবেমাত্র আমার প্রশ্ন আপডেট করেছি। আমি এটিতে খুব বেশি সময় ব্যয় করেছি, তবে আমি এটি সমাধান করতে পেরে আনন্দিত। আপনার উত্তরের জন্য ধন্যবাদ. এটি প্রকৃতপক্ষে, সমস্যার সমাধান।
বুজু

@ কেভ দয়া করে উত্তর হিসাবে পোস্ট করুন
স্ল্যাক করুন

বুজু, @ কেভ - আপনি যদি কোনও উত্তর খুঁজে পান তবে নীচে উত্তর হিসাবে পোস্ট করুন, প্রশ্নটি সম্পাদনা করবেন না।
user1686

উত্তর:


10

আপনি একটি স্ক্রিপ্টের জন্য লিখিত দৌড়াচ্ছে ব্যাশ অধীনে SH , যা বর্ধিত সিনট্যাক্স বৈশিষ্ট্য অনেক অভাব আছে - [[একটি হল bashbuiltin কমান্ড উপলব্ধ নেই sh

পরিবর্তন #!/bin/shকরার জন্য #!/bin/bashবা #!/usr/bin/env bash


কিছু সিস্টেমে /bin/shএটির জন্য একটি সিলেট লিঙ্ক /bin/bash। এবং এটা সম্ভবত অনুমান করা যে যুক্তিসঙ্গতভাবে নিরাপদ bashহয় /bin/bash
কিথ থম্পসন

@ কিথ: এটি /bin/bashবেশিরভাগ লিনাক্স সিস্টেমে, তবে বিএসডিগুলিতে /usr/pkg/bin/bash, বা /usr/local/bin/bashযদি কোনও সরাসরি উত্স থেকে সংকলন করে।
ব্যবহারকারীর 6868 19

@ গ্রায়েটি: বা অন্য যে কোনও জায়গায় আপনি উত্স থেকে সংকলন করলে এটি রাখার সিদ্ধান্ত নেন। ঠিক আছে, ভাল পয়েন্ট। ব্যক্তিগতভাবে, আমি বরং /usr/bin/envহ্যাক ব্যবহারের চেয়ে প্রতিটি সিস্টেমে শেবাং সম্পাদনা করতাম (যা এই মুহুর্তে bashকলকারীদের মধ্যে যা ঘটে তা ব্যবহার $PATHকরে) তবে ওয়াইএমএমভি। (এবং আপনি /bin/bashএকটি সিমিলিংক তৈরি করতে পারেন - যদি আপনার প্রশাসকের অধিকার থাকে এবং আপনার সাথে জগাখিচুড়ি মনে হয় না /bin))
কিথ থম্পসন

@ কিথ: /usr/localঅটোটুলগুলি এটি ডিফল্টরূপে রাখার সিদ্ধান্ত নেয়। "ব্যক্তিগতভাবে" যতদূর যায়, আমি একই স্ক্রিপ্ট / সরঞ্জাম সংগ্রহস্থল থেকে বিভিন্ন আলাদা সার্ভার এবং ভিএম টানতে পছন্দ করি এবং প্রতিটি কমিটের পরে তার অর্ধেকটি শেবাংগুলি পুনরায় সম্পাদনা করার প্রয়োজন নেই।
ব্যবহারকারীর 6868

তাদের মধ্যে কেউই আমার পক্ষে কাজ করেনি: / আইএম-এ সেন্টো
অ্যাস্ট্রোয়ানু

0

স্ক্রিপ্টটি চলাকালীন sh এর পরিবর্তে বাশ উল্লেখ করুন। আমি ব্যক্তিগতভাবে লক্ষ্য করেছি যে ওবুন্টু 12.10 এর অধীনে এগুলি আলাদা different

bash script.sh arg0 ... argn

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