आर्स द्वारा स्क्रिप्ट का एक अन्य विकल्प एक बैश फ़ंक्शन होगा:
sshbatch() {
# Expect at least 2 parameters, if less are provided print help
if [[ ${#@} -lt 2 ]]; then
printf 'Usage: sshbatch [user@]host... input_file\n'
else
while read -r -u "$fd" host; do
# Check if the last parameter is a readable file, else print error and exit
[[ -r ${@:(-1)} ]] || { printf "The file ${@:(-1)} is not readable!\n"; break; }
# Run remote bash from the file given in the last parameter
ssh -o BatchMode=yes "$host" bash -s < "${@:(-1)}"
# Read host list from 1st to next to last parameters
done {fd}< <(printf '%s\n' "${@:1:${#@}-1}")
fi
}
मैं ssh के -T
विकल्प का उपयोग नहीं करता, क्योंकि यह सभी मामलों में इसके साथ काम नहीं करता है।
यह स्क्रिप्ट स्थितिगत पैरामीटर सरणी पर पैरामीटर विस्तार का उपयोग करती है $@
:
"${@:(-1)}"
अंतिम पैरामीटर तक फैलता है (शाब्दिक रूप से पहले अंत के बाद)
"${#@}"
स्थितीय मापदंडों की संख्या का विस्तार
"${@:1:${#@}-1}"
पहली से अंतिम तक के सभी मापदंडों की सूची में विस्तार किया गया है (शाब्दिक रूप से मापदंडों की संख्या कम है)।