I tried to read and write the same file in a pipeline, and got caught out by a race condition (why is the file empty?!). Do this instead:
some_script < file > smscrpt.$$ \ && mv smscrpt.$$ file || rm smscrpt.$$
|| removes the temporary file if it errors.
$$ is the process ID and ensures that you always have a unique temporary file name.