"निर्यात" एक फ़ंक्शन का उपयोग करके export -f
फ़ंक्शन बॉडी के साथ एक पर्यावरण चर बनाता है। इस उदाहरण पर विचार करें:
$ fn(){ echo \'\"\ \ \$; }
$ export -f fn
$ sh -c printenv\ fn
() { echo \'\"\ \ \$
}
इसका मतलब है कि केवल शेल (बस बैश?) फ़ंक्शन को स्वीकार करने में सक्षम होगा। आप फ़ंक्शन को स्वयं भी सेट कर सकते हैं क्योंकि बैश केवल एन्वार () {
को फ़ंक्शन के रूप में शुरू करने पर विचार करता है:
$ fn2='() { echo Hi;}' sh -c fn2
Hi
$ fn3='() {' sh -c :
sh: fn3: line 1: syntax error: unexpected end of file
sh: error importing function definition for `fn3'
यदि आपको एसएसएच पर इस चर को "निर्यात" करने की आवश्यकता है, तो आपको वास्तव में एक स्ट्रिंग के रूप में फ़ंक्शन की आवश्यकता है। यह प्रिंट विकल्प (साथ किया जा सकता -p
कार्य (के लिए) -f
के) declare
में निर्मित:
$ declare -pf fn
fn ()
{
echo \'\"\ \ \$
}
यह बहुत उपयोगी है यदि आपके पास अधिक जटिल कोड है जिसे एसएसएच पर निष्पादित करने की आवश्यकता है। निम्नलिखित काल्पनिक लिपि पर विचार करें:
#!/bin/bash
remote_main() {
local dest="$HOME/destination"
tar xzv -C "$dest"
chgrp -R www-data "$dest"
# Ensure that newly written files have the 'www-data' group too
find "$dest" -type d -exec chmod g+s {} \;
}
tar cz files/ | ssh user@host "$(declare -pf remote_main); remote_main"
#!/bin/sh
करने के लिए बदल#!/bin/bash
और बस के बादdoit() {...}
export -f doit