লিনাক্স ব্যাশ স্ক্রিপ্ট, একক কমান্ড তবে একাধিক লাইন?


97

গুগল অনুসন্ধান করে আমার কাছে নিম্নলিখিত স্ক্রিপ্টটি রয়েছে এবং এটি আমার লিনাক্স সিস্টেমটিকে একটি সংরক্ষণাগারে ব্যাক আপ করে:

#!/bin/bash
# init

DATE=$(date +20%y%m%d)

tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev --exclude=/share/Archive /

এটি কাজ করে, তবে আমি ভাবছি যে আমি একাধিক লাইনে কমান্ডটি প্রদর্শন করতে স্ক্রিপ্টটি ফর্ম্যাট করতে পারি, এরকম কিছু, তাই পরে সম্পাদনা করা সহজ:

tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz 
--exclude=/proc 
--exclude=/lost+found 
--exclude=/sys 
--exclude=/mnt 
--exclude=/media 
--exclude=/dev 
--exclude=/share/Archive 
/

এইভাবে পরে পড়া এবং সম্পাদনা করা সহজ। এইভাবে কোনও বাশ স্ক্রিপ্টটি ফর্ম্যাট করা সম্ভব?

উত্তর:


129

আপনাকে কেবল প্রতিটি লাইনের শেষে "\" যুক্ত করতে হবে এবং এটি করা ভাল হওয়া উচিত।

আপনার মত দেখতে হবে:

tar -cvpzf /share/Recovery/Snapshots/$(hostname)_$(date +%Y%m%d).tar.gz \
    --exclude=/proc \
    --exclude=/lost+found \
    --exclude=/sys \
    --exclude=/mnt \
    --exclude=/media \ 
    --exclude=/dev \
    --exclude=/share/Archive \
    /

কয়েকটি শর্টকাট

(comment HOSTNAME সেট করার জন্য আপনার মন্তব্য আপডেটের ভিত্তিতে)

$HOSTNAME

সেট করতে দুটি বিকল্প:

  1. HOSTNAME সেট করুন

    Hostname = $ (হোস্ট-নেম)

  2. কমান্ড প্রতিস্থাপন ব্যবহার করুন (যেমন $(command))

    সুতরাং এটি উপরের মত দেখতে হবে। এটি কমান্ডটি এটি ব্যবহার করার আগে রান করে তোলে।

$DATE

আর একটি পরিবর্তন এড়ানো সহজ হবে:

$(hostname)_$(date +%Y%m%d).tar.gz \

$ man date তারিখ বিকল্পের জন্য ফর্ম্যাট থাকবে, উপরেরটি YYYYmmdd


ধন্যবাদ বন্ধুরা. গত এক জিনিস. আমার স্ক্রিপ্টের ফাইলের নাম অংশটিতে সমস্যা আছে বলে মনে হচ্ছে: O HOSTNAME_ $ DATE.tar.gz এখন আমি যখন স্ক্রিপ্টটি চালাচ্ছি, আউটপুট ফাইলটি: 20121120.tar.gz
— জে

আপনি যদি চান তবে আপনার আসল "হোস্ট নেম" এটি পিছনে টিক্সে রেখে দিন (টিল্ড "key" কী উপরে ট্যাবটি): /share/Recovery/Snapshots/`hostname`_$DATE.tar.gz
— নার্ডওয়ালার

যেকোন সময় @ জায়েলোক্রিক্স - এসইউতে আপনাকে স্বাগতম!
— নার্ডওয়ালার

1
এটা তোলে হয় বাঞ্ছনীয় ব্যবহার করতে $(command)পরিবর্তে `command`।
— andrybak

9

পরবর্তী লাইনে একটি কমান্ড চালিয়ে যেতে ব্যাকস্ল্যাশ ব্যবহার করুন:

tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz \
--exclude=/proc \
--exclude=/lost+found \
--exclude=/sys  \
--exclude=/mnt  \
--exclude=/media  \
--exclude=/dev \
--exclude=/share/Archive \
/

এটি ড্যাং করুন @ পল! আমাকে কেবল মারধর করুন: ডি
— নার্ডওয়ালার

@ আন্ডারওয়ালার হে, আমি ভেবেছিলাম আপনারা প্রথমে এসেছেন!
— পল

এটিকে আরও দরকারী করতে এবং ইন্ডেন্টেশনগুলি পেতে আমি এটি আপডেট করতে ফিরে গিয়েছিলাম। আমি এসইউকে ভালবাসি যদিও বড় আকারের।
— নার্ডওয়ালার

এটা যেমন আমার জন্য কাজ করে না। ইনalias ub='source ~/.bash_aliases \ && source $HOME/.bash_aliases \ && echo "aliases updated."';
— TheD সংজ্ঞাবিদ

1
@ দ্য ডেফিনিশনিস্ট এটির একটি আলাদা সমস্যার মতো মনে হচ্ছে। সম্ভবত একটি নতুন প্রশ্ন খুলুন?
— পল

5

একই কমান্ড, তবে প্রতিটি লাইনের মন্তব্যে, হ'ল:

tar -cvpzf /share/Recovery/Snapshots/$(hostname)_$(date +%Y%m%d).tar.gz `#first comment` \
    --exclude=/proc `#second comment` \
    --exclude=/lost+found `# and so on...` \
    --exclude=/sys \
    --exclude=/mnt \
    --exclude=/media \ 
    --exclude=/dev \
    --exclude=/share/Archive \
    /
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.