Shells en shells
Trabajando con múltiples directorios
Mientras es común trabajar en un directorio puede ser beneficioso trabajar en múltiples lugares al mismo tiempo. Para esto Nu ofrece el concepto de "shells". Tal como implica, son una manera de tener activo múltiples shells en uno permitiendote rápidamente saltar entre directorios de trabajo y más.
Para empezar entremos a un directorio:
/home/sophia/Source/nushell(master)> enter ../lark
/home/sophia/Source/lark(master)> ls
----+----------------+-----------+----------+---------+---------------+---------------
# | name | type | readonly | size | accessed | modified
----+----------------+-----------+----------+---------+---------------+---------------
0 | Cargo.toml | File | | 2.2 KB | 6 months ago | 6 months ago
1 | target | Directory | | 4.1 KB | 10 months ago | 6 months ago
2 | notes | Directory | | 4.1 KB | 10 months ago | 6 months ago
Entrar es similar a cambiar directorios (como vimos previamente con el comando cd
). Esto permite saltar al directorio para trabajar dentro del mismo. En lugar de cambiar de directorio, ahora estamos en dos directorios. Para ver esto con más claridad podemos usar el comando shells
que enumera los directorios actualmente activos:
/home/sophia/Source/lark(master)> shells
---+---+------------+-----------------------------
# | | name | path
---+---+------------+-----------------------------
0 | | filesystem | /home/sophia/Source/nushell
1 | X | filesystem | /home/sophia/Source/lark
---+---+------------+-----------------------------
El comando shells
nos muestra que hay dos shells activos: nuestro directorio fuente original "nushell" y ahora este nuevo directorio "lark".
Podemos saltar entre estas shells con los accesos directos n
y p
, cortos de siguiente "next" y previo "previous":
/home/sophia/Source/lark(master)> n
/home/sophia/Source/nushell(master)> p
/home/sophia/Source/lark(master)>
Podemos notar el directorio cambiando pero también siempre podremos regresar al directorio previo en el cual estábamos trabajando. Esto nos permite trabajar en múltiples directorio en la misma sesión.
Saliendo del shell
Puedes salir de una shell que hayas entrado (usando enter
) a través del comando exit
. Si esta es la última shell, Nu se cerrará.
Siempre puedes cerrar Nu incluso si tienes múltiples shells activas usando el comando exit
pasando la bandera --now
de la siguiente forma exit --now
Más allá de los directorios
Nu también puede crear shells de otras cosas aparte de las rutas del sistema de archivos. Digamos por ejemplo que estás trabajando con un gran conjunto de datos y no deseas perderte dentro del mismo.
Para ver cómo funciona haremos el siguiente ejercicio. Actualmente en Nu tenemos enumerados los complementos desarrollados (plugins) en "Cargo.toml" digamos que también acabamos de crear un nuevo complemento en el directorio src/plugins llamado "doc.rs" y nos interesa saber que se encuentre enumerado también en "Cargo.toml" para que se instale al compilar Nu.
Entraremos al archivo "Cargo.toml" del código fuente de Nu:
/Users/andresrobalino/Code/nushell(master)> enter Cargo.toml
/> ls
------------+--------------+------------------+----------+----------
bin | dependencies | dev-dependencies | lib | package
------------+--------------+------------------+----------+----------
[11 items] | [object] | [object] | [object] | [object]
------------+--------------+------------------+----------+----------
Por el momento solo hemos entrado al archivo y podemos observar en la tabla devuelta por ls
lo que hay. Si prestas atención hemos entrado a un archivo con formato que reconoce Nu (.toml). Nu también nos proyecta el contenido del archivo en forma de sistema de archivos para explorarlo como si estuvieramos dentro de un sistema de archivos.
Antes de continuar revisemos las shells activas:
/> shells
---+---+-------------------------------------------------+------------------------------------
# | | name | path
---+---+-------------------------------------------------+------------------------------------
0 | | filesystem | /Users/andresrobalino/Code/nushell
1 | X | {/Users/andresrobalino/Code/nushell/Cargo.toml} | /
---+---+-------------------------------------------------+------------------------------------
Observamos que hay dos activas indicándonos que nos encontramos dentro de "Cargo.toml" en la ruta predeterminada "/". Revisemos el listado de nuevo:
/> ls
------------+--------------+------------------+----------+----------
bin | dependencies | dev-dependencies | lib | package
------------+--------------+------------------+----------+----------
[11 items] | [object] | [object] | [object] | [object]
------------+--------------+------------------+----------+----------
Puede que los complementos se encuentren en "bin", vamos ahí:
> cd bin
/bin> ls
----+----------------------+---------------------------
# | name | path
----+----------------------+---------------------------
0 | nu_plugin_inc | src/plugins/inc.rs
1 | nu_plugin_sum | src/plugins/sum.rs
2 | nu_plugin_add | src/plugins/add.rs
3 | nu_plugin_edit | src/plugins/edit.rs
4 | nu_plugin_str | src/plugins/str.rs
5 | nu_plugin_skip | src/plugins/skip.rs
6 | nu_plugin_sys | src/plugins/sys.rs
7 | nu_plugin_tree | src/plugins/tree.rs
8 | nu_plugin_binaryview | src/plugins/binaryview.rs
9 | nu_plugin_textview | src/plugins/textview.rs
10 | nu | src/main.rs
----+----------------------+---------------------------
Notar que siempre podemos saltar de vuelta al directorio en el que estuvimos trabajando usando p
(para previo).
/bin> p
Verifiquemos las shells:
/Users/andresrobalino/Code/nushell(master)> shells
---+---+-------------------------------------------------+------------------------------------
# | | name | path
---+---+-------------------------------------------------+------------------------------------
0 | X | filesystem | /Users/andresrobalino/Code/nushell
1 | | {/Users/andresrobalino/Code/nushell/Cargo.toml} | /bin
---+---+-------------------------------------------------+------------------------------------
Nos encontramos ahora en la shell donde estuvimos antes de entrar al archivo "Cargo.toml", vamos al directorio donde se encuentra el código fuente de los complementos (plugins):
/Users/andresrobalino/Code/nushell(master)> cd src/plugins/
/Users/andresrobalino/Code/nushell/src/plugins(master)> ls
----+---------------+------+----------+---------+------------+------------
# | name | type | readonly | size | accessed | modified
----+---------------+------+----------+---------+------------+------------
0 | doc.rs | File | | 3.0 KB | a week ago | a week ago
1 | sum.rs | File | | 3.0 KB | a week ago | a week ago
2 | inc.rs | File | | 11.8 KB | a week ago | a week ago
3 | sys.rs | File | | 9.2 KB | 2 days ago | 2 days ago
4 | edit.rs | File | | 2.7 KB | a week ago | a week ago
5 | str.rs | File | | 21.4 KB | 5 days ago | 5 days ago
6 | secret.rs | File | | 1.8 KB | 2 days ago | 2 days ago
7 | skip.rs | File | | 1.7 KB | a week ago | a week ago
8 | binaryview.rs | File | | 13.0 KB | a week ago | a week ago
9 | tree.rs | File | | 3.0 KB | a week ago | a week ago
10 | add.rs | File | | 2.7 KB | a week ago | a week ago
11 | textview.rs | File | | 9.4 KB | 5 days ago | 5 days ago
----+---------------+------+----------+---------+------------+------------
Ahora podemos comparar los dos para verificar si faltan complementos adicionales o si hay complementos adicionales que necesitemos agregar a nuestro archivo "Cargo.toml" (¡y claramente falta agregarlo a "Cargo.toml"!)