LINUX.ORG.RU

Как экранировать символы?


0

0

Есть три файла в названии которых есть пробелы. Есть команда mail, она может посылать атачи. Надо сделать скрипт, которому передается список файлов и он их отправляет аттачем. Чтобы программе mail указать аттачи надо перед каждым файлом написать ключ -i. Т.е.

echo "Sending $@" | mail -s "Sending" -i folder/file1 -i folder/file2 email@host.com

Файлов может быть много. Поэтому надо как-то создать строчку и скормить ее mail. У меня не получается экранировать символы. Как это можено сделать? Вот что сейчас есть

#!/bin/bash


if [ $# -lt 1 ]
then
	echo "Usage: $0 file(s)"
	exit 1
fi

attach=""

for f in "$@"
do
	attach+="-a "\"$f\"" "
done

echo "Sendinng: \"$@\" " | mail -s "Sending" $(echo "$attach") mail@host.com 

$($mail)

exit $?

Я по всякому уже пробовал и один раз даже получилось. Только вот как я сделал я не запомнил.

Думаю, что без eval не обойтись. То есть замените $(echo «$attach») на просто «$attach» и делайте на все это eval.

mky ★★★★★
()
#!/bin/sh 
attach=""  
for f in "$@"; do  
   attach="$attach -a '"$f"' "  
done  
echo "Sending: $@" | mail -s "Sending" $attach mail@host.com
sdio ★★★★★
()
Ответ на: комментарий от mky

Спасибо. С eval'ом получилось. Но до этого получилось и без него как-то один раз.

Вот код, если кому-то надо.

#!/bin/sh


if [ $# -lt 1 ]
then
	echo "Usage: $0 file(s)"
	exit 1
fi

attach=""

for f in "$@"
do
	attach+="-a "\"$f\"" "
done

echo "Sendinng: $@" | eval "mail -s \"Sending $@\" $attach user@host.com"

exit $?

facelift
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.