Поскольку здесь-документ обозначен <
\$`
. Следовательно, $newUrl
в here-документе расширяется до своего значения в локальной оболочке.
Чтобы вместо этого передать $newUrl
в удаленный shell и заставить его расширить переменную, вы можете защитить $
от расширения: \$newUrl
вместо $newUrl
, или использовать литерал here-документа: <<'EOF'
вместо ``<
Вы расширяете переменную newUrl
в строку, которая будет интерпретирована оболочкой. Это означает, что значение переменной будет интерпретировано как фрагмент сценария оболочки, а не как строка. Если значение содержит специальные символы командного интерпретатора, это приведет к хаосу. (Какие символы являются проблемными, зависит от того, какое решение вы используете.)
Вместо того чтобы использовать много уровней цитирования и расширения, передайте URL в качестве входных данных команде, запущенной от имени root. Тогда вам не о чем будет беспокоиться. У этого есть дополнительное преимущество: он работает, даже если sudo не настроен на прием -E
, что встречается довольно часто. Вы можете использовать sudo sh -c 'cat >>/path/to/file'
, или лучше, чтобы избежать возможных проблем с цитированием файла, sudo tee -a /path/to/file
.
sshpass -p "password" ssh -t -t my-box <<'EOF'
newUrl="this is a url"
printf '%s\n' "$newUrl" | sudo tee -a /path/to/file
EOF
Каталог ~/.local/share/Trash
содержит 2 подкаталога -, files
и info
. Когда вы перемещаете что-то в корзину с помощью графического интерфейса, он фактически перемещает это в подкаталог файлов -и может поместить некоторую метаинформацию -в подкаталог info -. Итак, если вы хотите удалить элементы в Корзине из командной строки, вам действительно нужно сделать
rm -rf ~/.local/share/Trash/*/*