xargs удаляют имя файла, содержащее $

Вы проверили, таким образом, у пользователя на самом деле есть оболочка (проверьте passwd файл)? Если оболочка будет установлена на/bin/false или подобная, то Вы не сможете войти в систему по ssh.

0
задан 26 February 2013 в 17:36
2 ответа
xargs -a /var/log/del.log -i -exec  ssh root@abc.com 'rm  -rf "{}"'

Поменяйте местами одинарные кавычки и двойные кавычки:

xargs -a /var/log/del.log -i -exec  ssh root@abc.com "rm  -rf '{}'"

, тогда команда будет расширена до:

ssh root@abc.com "rm -rf '~$excel.xlxs'"

и работает нормально, потому что:

man bash :

Заключение символов в одинарные кавычки сохраняет буквальное значение каждого символа в кавычках. Одинарная кавычка может не встречаться между одинарными кавычками, даже если перед ними стоит обратная косая черта.

Заключение символов в двойные кавычки сохраняет буквальное значение всех символов в кавычках, за исключением $, , \, а если включено раскрытие истории,!. Символы $ и сохраняют свое особое значение в двойных кавычках.

0
ответ дан 4 December 2019 в 14:16

Оболочка интерпретирует слово, следующее за знаком $ и предшествующее . как переменная. Поскольку $ excel не задан как переменная и не как переменная среды, оболочка заменяет его пустой строкой. Итак,

  ~$excel.xlxs  ==>  ~.xlxs     when you replace the variable with an empty string.

Чтобы исправить это, вам нужно поставить перед знаком доллара escape-символ \ -

   rm -rf ~\$excel.xlsx
2
ответ дан 4 December 2019 в 14:16

Теги

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