Использование 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
,