El propósito de estas FAQs (Frequently Asked Questions) es resolver las preguntas y dudas más
frecuentes que aparecen cuando nos enfrentamos por vez primera a la
programación del shell y a la biblioteca de hebras.
§
FAQ sobre la “Programación del tc-shell”
También
podéis encontrar una relación de ejercicios resueltos y algunas propuestas de
ejercicios para pensar el comportamiento “extraño” que en ocasiones nos parece
que tiene el tc-shell.
- - ¨¨¨ - -
1. Nombre de camino (archivo) absoluto y relativo
El
nombre de cualquier archivo es único. Se dice que el nombre de un archivo es
absoluto (pathname absoluto) cuando
es completo, es decir, empieza en el directorio raíz /. Por ejemplo: /dev/tty es un nombre de archivo
absoluto.
El
nombre es relativo (pathname
relativo) si nos da la secuencia de búsqueda por el sistema de archivos
empezando por el directorio actual (el nombre no empieza por /). Por ejemplo:
dev/tty es un nombre relativo.
2. Directorio actual y directorio de trabajo
Ambos
se refieren al directorio en el que está trabajando el usuario. Cuando se usa
la orden cd se está cambiando el directorio actual o de trabajo. Cualquier
operación sobre archivos, si se da un pathname relativo, se realiza partiendo
del directorio actual. Para saber cual es el directorio de trabajo actual basta
con ejecutar la orden pwd.
Es
el directorio por defecto que tiene un usuario cuando se conecta al sistema.
Siempre es el mismo, a no ser que lo cambie el administrador del sistema. Suele
ser el directorio a partir del cual el usuario crea su propia estructura de
directorios y archivos. Para saber cual es el directorio home basta con
ejecutar: echo $home o echo $HOME
Las
variables multipalabra se crean con la orden set. Por ejemplo, vamos a crear
una variable multipalabra con cuatro elementos: : set conjunto = (1 2 3 4).
Para acceder a cada uno de los elementos, basta poner conjunto[1]. Son matrices
cuyos elementos comienzan siempre en la posición 1 (no en el 0 como las
matrices en C).
5. Error frecuente “no muestra el resultado de la última línea
del script”
Este
problema viene porque después de la última línea dentro del programa shell o
script debe existir un salto de línea (pulsar enter antes de cerrar el archivo
que contiene el script).
6. Modificación de las variables de entorno desde un programa
Para
que las modificaciones de las variables de entorno tengan efecto en el shell
donde se está ejecutando un script, debemos utilizar la orden source junto con el nombre del programa
o script.
Podemos
usar las opciones –v y –x junto con la orden tcsh para comprobar el
funcionamiento de un script. Con la opción –v se muestra en pantalla la
secuencia de las ordenes que se ejecutarían sin hacer sustituciones (no se
ejecuta nada) y con –x se mostrarían las ordenes antes de ser ejecutadas.
jobs
lista los trabajos activos (en segundo plano y suspendidos) del usuario y su
estado de ejecución. ps muestra información diversa sobre los procesos activos
en el sistema (por defecto sólo los de la sesión del usuario que ejecuta la
orden): su PID, su PPID, su tiempo de CPU consumido, etc.
9. Cómo sacar por pantalla lo que se va a redireccionar a otra
orden
Para
ello se usa la orden tee que bifurca lo que le llega de la entrada estándar a
la salida estándar y a un archivo que se le ponga como argumento. Ejemplo:
ls | sort | tee listaOrdenada
en
listaOrdenada tendremos la lista de
archivos del directorio actual ordenada según el código ASCII.
10. ¿Es posible construir scripts recursivos?
Si,
no hay ningún problema.
11. Diferencia entre variable conmutador (set, unset) y variable
con contenido
Cuando
ejecutamos set var, la variable var ya existe en el entorno donde nos
encontremos, si queremos que no exista debemos usar unset var. Esto nos es útil
cuando sólo necesitamos tener una variable como conmutador (o existe o no
existe). A diferencia de esto, si necesitamos que tome un valor concreto
debemos asignarle un valor, por ejemplo set var = 3
La
@ la usamos para expresar que la variable que definimos puede almacenar un
valor entero o el resultado de una expresión matemática. Si usamos set para
este tipo de variables dará un error.
13. Cómo ampliar una variable multipalabra con varios elementos
más
En
este ejemplo añadimos el carácter “a” a la variable multipalabra var. Nótese
que se está redefiniendo.
set var = (a $var)