An updated tcsh package that fixes various bugs is now available for Red Hat Enterprise Linux 6.
Tcsh is an enhanced and compatible version of the C shell (csh). It is a command language interpreter, which can be used as an interactive login shell, as well as a shell script command processor.
Under certain circumstances when using the cwd symbolic link, a null pointer may have been incorrectly dereferenced, causing the tcsh shell to terminate unexpectedly. With this update, the pointer is now checked properly and tcsh no longer crashes.
This package fixes the return value of the "status" (or "$?") variable in the case of pipelines and backquoted commands. The "anyerror" variable, which selects the behavior, has been added to retain backward compatibility.
If the tcsh shell redirected standard output to a child process using a pipe and this child process terminated, the shell tried to print a message to the already-closed pipe as a high-priority event that could never been finished. As a consequence, tcsh entered an infinite loop and consumed up to 100% of the CPU. To fix this issue, this error event is now removed from the event queue before the shell tries to write it to the broken pipe. As result, the parent process terminates ordinarily.
Prior to this update, the blkend() function was called redundantly in the tsch code. These calls had no effect on tcsh functionality and thus they have been removed. Tcsh functionality remains unchanged and the code is now more effective.
The tcsh shell allowed variables to named in incorrect formats, such as by allowing a variable name to begin with a digit. This issue has been fixed: variable names are now verified according to Unix variable-naming conventions.
All users of tcsh are advised to upgrade to this updated package, which resolves these issues.
Updated tcsh packages that fix two bugs are now available for Red Hat Enterprise Linux 6.
The tcsh packages contain an enhanced and compatible version of the C shell (csh), which is a command language interpreter, and can be used as an interactive login shell, as well as a shell script command processor.
When using multiple shells simultaneously, the command history is saved from all shells in one ".history" file. Previously, when running multiple csh scripts at the same time, lines in the ".history" file could be reordered with different timestamps or some of the entries could disappear, rendering the ".history" file corrupted. As a consequence, start-up scripts could be slowed down. This update implements file locking mechanism that uses shared readers and an exclusive writer to prevent the ".history" file from being corrupted.
Previously, the "anyerror" variable could be selected to set the tcsh exit value behavior. However, "anyerror" is a shell variable and therefore was not propagated to subshells, and could not globally affect csh scripts. This update modifies the tcsh exit value behavior to the default behavior of csh: the new "tcsh_posix_status" variable is now available instead of "anyerror" to allow behavior similar to the POSIX standard.
All users of tcsh are advised to upgrade to these updated packages, which fix these bugs.