. как параметр командной строки к команде, работающей в фоне

В первом случае дамп* интерпретируется оболочкой и расширяется до совпадающих имён файлов, а затем передаётся в find. В действительности, find видит:

find dumpa dumpb ... -type f ...

Во втором случае оболочка не интерпретирует. find does the filtering. Поэтому, учитывая рекурсивный характер find, второй метод может найти файлы, которые первый пропустит.

Второй метод более гибкий, так как можно использовать переменные при формировании фильтров -name/-path, но сложно получить -оболочку для разворачивания подстановочного знака в переменной. В зависимости от того, какой у вас вариант использования, любой из них будет правильным, но второй может быть скорректирован, чтобы соответствовать первому во всех случаях (используя дополнительные опции find, такие как maxdepth, или prune), но обратное не верно.

Рассмотрим:

$ tree .
.
├── dumpa
│   └── dumpc
├── dumpb
├── dumpd
└── not-dump
    └── dumpe
$ find . -type f -name 'dump*'
./not-dump/dumpe
./dumpd
./dumpa/dumpc
$ find  dump* -type f 
dumpa/dumpc
dumpd

Также обратите внимание, что если ничто не совпадает со спецсимволом, то первый приведет к ошибке, а второй - к успеху без результата:

$ find blahblah* -type f
find: `blahblah*': No such file or directory
$ find . -name 'blahblah*' -type f
$

Я бы предпочел второй метод, потому что:

  1. Он более гибкий.
  2. Менее подвержен ошибкам. Использование подстановочных знаков, где ни одно совпадение не может вызвать проблем. Я избегаю расширения оболочки подстановочных символов, если это возможно, особенно если у меня под рукой инструмент типа find.

И не связанный с этим пункт, пропустите xargs:

find ... -exec ls -lrth {} +

0
20.03.2015, 21:15
1 ответ

Для этого существуют различные способы. Самое простое и худшее - иметь пароль в сценарии, как вы предлагаете. Поскольку ваш компьютер не подключен к Интернету, большинство проблем безопасности являются спорными, и вы можете просто использовать параметр sudo -S , который позволяет передавать пароль от STDIN:

echo password | sudo -S shutdown -h now

Более безопасный подход заключается в том, чтобы разрешить определенному пользователю выполнять команду shutdown без пароля. Сначала запустите visudo для редактирования файла sudoers и добавьте следующую строку:

nate  ALL=NOPASSWD:/sbin/shutdown

, которая позволит пользователю nate запускать sudo/sbin/shutdown без запроса пароля.

-121--99148-

Добавить в конце сценария:

read junk

Для получения дополнительной информации см. Bash Manual .

-121--99132-

Каждый процесс имеет свой собственный «текущий рабочий каталог», который нельзя изменить вне процесса.

При

grep some-string -r . &

запуске оболочки grep в фоновом режиме текущий рабочий каталог grep инициализируется в том же значении, что и оболочки в этот момент . grep - определение . вот его собственный текущий каталог, а не ничего другого; оболочка не участвует в интерпретации аргумента.

Последующее изменение каталога оболочки с помощью cd не влияет на grep ...

2
28.01.2020, 02:36

Теги

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