Электронная почта была разработана еще в те времена, когда компьютеры не имели постоянного, быстрого сетевого соединения друг с другом, по модели почтовой почты. Когда вы посылаете электронное письмо, оно отправляется на сервер, который посылает его на другой сервер, и так далее, пока письмо не достигнет своего адресата. Самые старые почтовые системы имели локальную доставку , затем были системы, в которых электронная почта должна была указывать список ретрансляторов до места назначения , и в настоящее время электронная почта автоматически маршрутизируется по сетям, где практически все компьютеры могут достигать друг друга большую часть времени. Тем не менее, электронная почта остается почтовой службой, а не службой мгновенных сообщений. Если электронная почта задерживается в пути, например, из-за временного перебоя в работе сети, промежуточный сервер будет держать электронную почту в резерве до тех пор, пока ссылка не будет восстановлена.
В связи с такой конструкцией, электронная почта является асинхронной. Все, что делает команда mailx
, это передает электронное сообщение на локальный MTA. Код возврата с mailx
, указывающий на успешную передачу, указывает на то, что местный MTA принял задание на доставку сообщения. На этот момент сообщение успешно отправлено . После этого MTA отправляет письмо по назначению. Если MTA не в состоянии выполнить свое обещание по доставке, он должен отправить сообщение bounce пользователю, который отправил сообщение.
Вы не можете знать наверняка, доставлено ли письмо в почтовый ящик получателя, и даже это бесполезно (например, что, если письмо успешно доставлено, то компьютер, на котором хранится почтовый ящик, сгорит при пожаре). Если вам нужно знать, получил ли получатель письмо, единственный верный способ - это включить в него инструкции для подтверждения получения письма. (Существуют способы автоматической отправки квитанции при открытии письма в определенных программах, но они работают только в совместимых программах, и они также ненадежны, например, если компьютер получателя сломался сразу же после открытия письма)
Знание того, доставлено ли письмо, ничего не говорит вам о том, смогли ли другие люди его прочитать. В отличие от физических объектов, электронные сообщения на самом деле не "отклоняются": они копируются, и если вокруг есть дополнительные копии, это не может быть обнаружено. Если электронное сообщение должно быть конфиденциальным, зашифровать его.
Ваша строка:
val=$("$line" | wc -c)
Эта пытается выполнить команду, данную $line
и пропустить выход через wc -c
. Сообщение об ошибке, которое Вы видите, указывает на то, что он пытается выполнить команду "hellounix
", как и в первой строке Вашего файла. Если Вы хотите передать значение переменной в команду вместо нее, Вы можете использовать printf
:
val=$(printf '%s' "$line" | wc -c)
Если Вы используете Bash, zsh, или другую более мощную оболочку, Вы также можете использовать здесь stringings:
val=$(wc -c <<<"$line")
<<
выполняет расширение на строке "$line"
, а затем предоставляет его в качестве стандартного входа wc -c
.
Однако в данном конкретном случае можно использовать встроенное расширение параметра оболочки для получения значения длины переменной вообще без трубопровода:
val=${#line}
Расширение #
расширяется до:
Длина строки. Подставляется длина в символах значения параметра. Если параметр '*' или '@', то результат расширения не указывается. Если параметр не задан и установлено -u, то расширение будет неудачным.
val=$("$line" | wc -c)
Эта строка означает "назначить вывод команды "$line" | wc -c
переменной val
". Допустим, $line
содержит hellounix
, так что теперь это выглядит следующим образом:
val=$(hellounix | wc-c)
Пытается выполнить команду с именем hellounix
, которая не найдена, поэтому вы получаете ошибку hellounix: не найдена
.
Простым исправлением было бы добавление echo
, например:
val=$(echo -n "$line" | wc -c)
Это "эхо" линии к stdout, а затем передача ее в wc
. Опция -n
удаляет символ новой строки в конце строки, так как wc
считает его. Если необходимо считать символ новой строки в конце строки, удалите опцию -n
.
С -n
:
Enter File Name
testfile
File Found with a Name testfile
File Content as below
hellounix -->Containd 9 Charecter
file1 -->Containd 5 Charecter
Total Line in File : 2
Только с echo
:
Enter File Name
testfile
File Found with a Name testfile
File Content as below
hellounix -->Containd 10 Charecter
file1 -->Containd 6 Charecter
Total Line in File : 2