Использование rm * (подстановочный знак) в посланнике: нет такого файла или каталога

Я использую Python и Envoy. Мне нужно удалить все файлы в каталоге. Помимо некоторых файлов, каталог пуст. В терминале это будет:

rm /tmp/my_silly_directory/*

Здравый смысл подсказывает, что в посланнике это означает:

r = envoy.run('rm /tmp/my_silly_directory/*')

Тем не мение:

r.std_err -> "rm: cannot remove `/tmp/my_silly_directory/*': No such file or directory"

Естественно, есть альтернативы использованию посланника в этом случае, мне просто интересно, почему это не работает.

Есть какие-нибудь подсказки?

1 ответ

Решение

В UNIX задача интерпретировать такие символы как *, Если вы выполняете программу и передаете аргумент с * в нем непосредственно к программе - что, по-видимому, то, что здесь делается, - тогда вы получите ошибку, как вы видите. rm просто предполагает * это имя файла, и действительно, на самом деле можно создать такой файл.

Одним из решений может быть выполнение оболочки и позволить ей выполнять вашу команду от вашего имени, что-то вроде

r = envoy.run('sh -c "rm /tmp/my_silly_directory/*"')

Оболочка будет интерпретировать * перед вызовом rm,

Другие вопросы по тегам