Примечание.:Приведенный здесь ответ должен работать. Однако нарушает лучшие практики. Этот ответ также предполагает, что sshpass
доступен на хосте, где будет инициирована команда. Пользователь отметил, что он будет использоваться один раз, а затем удален.
sshpass -pPASSWORD ssh -tt [username]@[host] 'echo PASSWORD | sudo -S -s /bin/bash -c "service snmpd stop; reboot"'
По крайней мере, пользователь должен использовать обмен ключами для входа по ssh и разрешить выполнение нужных команд через sudo без пароля.
Вы не можете найти dir1, если dir1 является вашим рабочим каталогом. Вы никогда ничего не помещаете в переменную "$find"
FIND=$(cd ~/dir1; echo *)
echo "The contents of dir1 are: $FIND"
Что происходит там, так это то, что вы меняете рабочий каталог на dir1 в своей домашней папке, а затем позволяете bash показать вам все содержимое, которое не скрыто (" *" ). Результаты сохраняются в переменной FIND (, но если были ошибки,они тоже будут в FIND ). Если вам нужны также скрытые файлы и каталоги, это будет:
FIND=$(cd ~/dir1; echo.* *)
Вот, попробуй
result=$(find ~/dir1)
echo "The contents of dir1 are: $result"
или
echo "The contents of dir1 are: $(find ~/dir1)"
(Простите меня, если я говорю не так, я не лучший с Bash)result=$(find ~/dir1)
запускает find ~/dir1
и затем сохраняет его в result
,$(command)
запускает команду внутри ()
s и использует стандартный вывод STDOUT (/ вывод команды )команды как временная переменная,
Вместо этого вы также можете использовать ${result}
, что позволяет использовать такие сценарии, как echo "${result}asdf"
.
Надеюсь это поможет! Простите меня за неправильное форматирование, это мой первый пост :P
Ваш скрипт с исправлениями.
#!/bin/bash
# This script has no wildcards
find_output="$(find dir1)"
echo 'The contents of dir1 are:'"$find_output"
echo
Я подумал, что добавлю еще один ответ, так как все существующие имеют ошибки.
Некоторые из ваших ошибок:
find
не нуждается в .
в качестве первого аргумента. Да, часто бывает, но… Переменные оболочки должны быть в нижнем регистре. Для этого есть стандарт. И время от времени вы будете получать неожиданные ошибки, если сделаете их заглавными.
Если у вас нет других не упомянутых требований, вам нужна строка
echo The contents of dir1 are:$(ls dir1)
Вы можете использовать его как в сценарии bash, так и непосредственно из командной строки. Если вы хотите, чтобы имена файлов были в переменной, например. для будущего использования тогда
files=$(ls Wallpapers)
echo The contents of dir1 are:$files