Как я могу отобразить список файлов в каталоге?

Примечание.:Приведенный здесь ответ должен работать. Однако нарушает лучшие практики. Этот ответ также предполагает, что sshpassдоступен на хосте, где будет инициирована команда. Пользователь отметил, что он будет использоваться один раз, а затем удален.

sshpass -pPASSWORD ssh -tt [username]@[host] 'echo PASSWORD | sudo -S -s /bin/bash -c "service snmpd stop; reboot"'

По крайней мере, пользователь должен использовать обмен ключами для входа по ssh и разрешить выполнение нужных команд через sudo без пароля.

1
19.07.2020, 00:35
4 ответа

Вы не можете найти dir1, если dir1 является вашим рабочим каталогом. Вы никогда ничего не помещаете в переменную "$find"

FIND=$(cd ~/dir1; echo *)

echo "The contents of dir1 are: $FIND"

Что происходит там, так это то, что вы меняете рабочий каталог на dir1 в своей домашней папке, а затем позволяете bash показать вам все содержимое, которое не скрыто (" *" ). Результаты сохраняются в переменной FIND (, но если были ошибки,они тоже будут в FIND ). Если вам нужны также скрытые файлы и каталоги, это будет:

FIND=$(cd ~/dir1; echo.* *)
1
18.03.2021, 23:18

Вот, попробуй

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

1
18.03.2021, 23:18

Ваш скрипт с исправлениями.

#!/bin/bash

# This script has no wildcards

find_output="$(find dir1)"
echo 'The contents of dir1 are:'"$find_output"
echo

Я подумал, что добавлю еще один ответ, так как все существующие имеют ошибки.

Некоторые из ваших ошибок:

  • Похоже, вы предположили, что результат процесса помещается в переменную. Это не так, если вы не попросите, чтобы это было.
  • findне нуждается в .в качестве первого аргумента. Да, часто бывает, но…
  • Следующая проблема заключается в том, что вам нужно использовать кавычки. Я пока не думаю, что это вызвало ошибку (). Некоторые будут правы, говоря, что не все цитаты нужны. Однако они безопасны, и пока вы полностью не освоите их, вы также можете включить их. После этого вы можете также включить их.
  • Тогда у вас неправильный комментарий. Я ненавижу комментарии, потому что они почти всегда ошибочны. Комментарии должны только указывать, почему, или использоваться, если язык слишком слаб, чтобы ясно выразить намерение.

Примечание о написании переменных оболочки с заглавной буквы.

Переменные оболочки должны быть в нижнем регистре. Для этого есть стандарт. И время от времени вы будете получать неожиданные ошибки, если сделаете их заглавными.

0
18.03.2021, 23:18

Если у вас нет других не упомянутых требований, вам нужна строка

echo The contents of dir1 are:$(ls dir1)

Вы можете использовать его как в сценарии bash, так и непосредственно из командной строки. Если вы хотите, чтобы имена файлов были в переменной, например. для будущего использования тогда

files=$(ls Wallpapers)
echo The contents of dir1 are:$files
0
18.03.2021, 23:18

Теги

Похожие вопросы