Я довольно новичок в скрипте bash и, вероятно, не буду этого делать часто. У меня есть следующий скрипт для проверки последних обновлений в определенном месте, но я получаю: location: Undefined variable
, и метка времени не извлекается успешно.неопределенная переменная с использованием переменной оболочки в команде ssh
#!/bin/bash
servers=('x' 'y')
results=()
location="/path/to/location/"
for server in "${servers[@]}"; do
output=$(ssh "$server" 'find "${location}" -exec stat \{} --printf="%y\n" \; | sort -n -r | head -n 1')
x=(${server}:${output})
results+=(${x})
done
echo "Printing results..."
for res in "${results[@]}"; do
echo "$res"
done
Моя цель состоит в том, чтобы напечатать в конце:
x:<timestamp of last update>
y:<timestamp of last update>
мне интересно, что это неправильно.
'/ bin/sh' не поддерживает массивы, кстати, поэтому' servers = ('x' 'y') 'не может работать, не меняя вашу оболочку на bash, ksh или подобное. –
То же самое для 'x = (...)'. –
, который сказал, что ваше 'location' также не определено, потому что оно находится во внешних одинарных кавычках, поэтому, конечно, оно не будет расширяться. Лучший способ исправить это требует еще большего расширения bash, несовместимого с вашим # #/bin/sh' shebang. –