# PWB shell

El shell PWB (también conocido como el shell Mashey) fue un shell Unix.

## Historia

El shell PWB era una versión modificada (y generalmente restringida para ser compatible hacia arriba) del shell Thompson con características adicionales para aumentar la facilidad de uso para la programación. Fue mantenido por John Mashey y varios otros (Dick Haight, Alan Glasser).
El shell PWB se lanzó con la Versión 5 Unix, o a mediados de 1975 (las fuentes difieren), y se mantuvo disponible a través de la Versión 6 Unix. En la Versión 7 Unix (1979), el shell PWB fue reemplazado por el shell Bourne. El shell PWB también se incorporó en algunas versiones de Programmer's Workbench UNIX, alrededor de 1975–77.

## Características notables

Varias características fueron introducidas en el shell PWB y permanecen en muchos shells posteriores. Los comandos if y goto se hicieron internos al shell, y se extendieron para permitir if - then - else - endif, y switch y while, se introdujeron las construcciones, así como onintr para ignorar las interrupciones o detectarlas para realizar la limpieza. Se podrían usar variables simples, aunque sus nombres estaban limitados a una letra y algunas estaban reservadas para propósitos especiales, de los cuales algunos son los precursores de las variables de entorno encontradas en todos los sistemas Unix a partir de la versión 7.
Por ejemplo, la variable $s fue el antecesor de $HOME, que se utiliza para evitar las rutas de acceso de codificación dura. La variable $p fue el antecesor de $PATH, que permite a los usuarios buscar comandos en su propia elección de directorios. A diferencia de la mayoría de los sistemas UNIX de la época, el grupo de programación PWB/UNIX original era compartido por varios grupos de programación que no podían cambiar el contenido de /bin o /usr/bin, pero querían crear sus propios conjuntos de comandos compartidos. Además, la búsqueda de comandos del shell se mejoró para permitir que se invocarán los procedimientos del shell como comandos binarios, es decir, si el shell encuentra un archivo no binario marcado como ejecutable, generará otra instancia del shell para leer ese archivo como un script de shell. Por lo tanto, la gente podría escribir argumentos de comando en lugar de sh nombre de usuario/argumentos de comando. Todo este comportamiento se empaquetó como la función pexec, que fue el antecesor de execvp, para permitir que cualquier programa invoque comandos de la misma manera que el shell.
El carácter $, utilizado anteriormente para identificar argumentos en un script de shell, se convirtió en el marcador para eliminar la referencia de una variable y se podía usar para insertar el valor de una variable en una cadena entre comillas dobles. (Además de shells posteriores, esta característica también aparecerá más adelante en los lenguajes de programación PHP y Perl).

## Descendientes

Estas características no pudieron superar las deficiencias del shell Thompson, por lo que Stephen Bourne escribió un nuevo shell desde cero. Esta Bourne shell era incompatible con las shell Thompson y PWB, pero incluía equivalentes de la mayoría de las características de la shell PWB, pero se hacía desde cero, en lugar de incrementarse, con mucha discusión entre los distintos participantes. En particular, las variables de entorno y la maquinaria relacionada fueron diseñadas por Stephen Bourne, John Mashey y Dennis Ritchie como un mecanismo general para reemplazar las características anteriores más limitadas. Después de la adopción del shell Bourne como shell estándar en la Versión 7 Unix, el uso del shell PWB se eliminó gradualmente, aunque durante un tiempo, hubo un curso interno de Bell Labs llamado Programación del shell Bourne para programadores de Shell Mashey. (El shell C, desarrollado antes del lanzamiento público del shell Bourne, también heredó algunas de las características del shell PWB).