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


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.