No se puede acceder al cd en la carpeta de la máquina Linux. Dice que el archivo/carpeta no existe

No se puede acceder al cd en la carpeta de la máquina Linux. Dice que el archivo/carpeta no existe

Escribí un archivo ksh de prueba en un cd en una carpeta y hice una lista. Se escribe lo siguiente:

`cd "their_file/"`;

`pwd`;

`ls -l`;

Me da el siguiente resultado:

./test.ksh: line 2: /home/user/final: Is a directory

./test.ksh: line 3: total: command not found

Esta es mi contraseña:

/inicio/usuario/final

¿Cómo puedo solucionar esto? Supongo que está ejecutando la declaración cd y luego saliendo de la declaración. Estoy usando la máquina Fedora.

Respuesta1

Las comillas invertidas alrededor de cada comando en su secuencia de comandos harán que el shell tome la salida del comando y lo ejecute.esocomo una orden.

Usar comillas invertidas alrededor de un comando equivale a poner el comando dentro $( ... )(esta es la sintaxis preferida para capturar la salida de un comando).

El mensaje de error /home/user/final: Is a directoryproviene de kshintentar ejecutar el resultado de pwdcomo un comando y, de la misma manera, total: command not foundal intentar ejecutar el resultado de ls -l.

Retire las garrapatas invertidas. Elimine también el punto y coma ( ;). Estos sólo son necesarios si deseas poner dos comandos en la misma línea:

cd dir; pwd

Su guión debería verse así

#!/bin/sh

cd "their_file"
pwd
ls -l

Tenga en cuenta que esto aún se ejecutará pwdsi ls -lfalla cd. Para salir del script si cdfalla:

#!/bin/sh

cd "their_file" || exit 1
pwd
ls -l

Esto utiliza el hecho de que cddevuelve un valor distinto de cero.estado de salidasi falla. El ||(lógicoo) delante de exit 1significa que el script continuará ejecutando la exitdeclaración si cddevuelve "falso" (que en los scripts de shell es lo que significa un estado de salida distinto de cero).


La razón por la que obtienes /home/user/final: Is a directoryyno /home/user/final/their_file: Is a directoryes porque cdse ejecuta en unsubcapa(que es lo que sucede cuando lo pones entre comillas invertidas o dentro $( ... )). Dado que se ejecuta en un subshell, el cambio real del directorio de trabajo no se refleja en el shell principal (su script).

Por la misma razón, notará que cuando su secuencia de comandos haya terminado de ejecutarse, seguirá estando en el mismo directorio que cuando invocó la secuencia de comandos, y no en el their_filedirectorio.

Para obtener más información sobre este tema en particular, consulte "por qué la función cd en el script no funciona" y "Script para cambiar el directorio actual (cd, pwd)" (y otras preguntas similares).

información relacionada