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
:
Заключение символов в одинарные кавычки сохраняет буквальное значение каждого символа в кавычках. Одинарная кавычка может не встречаться между одинарными кавычками, даже если перед ними стоит обратная косая черта.
Заключение символов в двойные кавычки сохраняет буквальное значение всех символов в кавычках, за исключением $,
, \, а если включено раскрытие истории,!. Символы $ и
сохраняют свое особое значение в двойных кавычках.
Оболочка интерпретирует слово, следующее за знаком $
и предшествующее .
как переменная. Поскольку $ excel
не задан как переменная и не как переменная среды, оболочка заменяет его пустой строкой. Итак,
~$excel.xlxs ==> ~.xlxs when you replace the variable with an empty string.
Чтобы исправить это, вам нужно поставить перед знаком доллара escape-символ \
-
rm -rf ~\$excel.xlsx