Não é possível fazer o cd na pasta na máquina Linux. Diz que o arquivo/pasta não existe

Não é possível fazer o cd na pasta na máquina Linux. Diz que o arquivo/pasta não existe

Eu escrevi um arquivo ksh de teste para cd em uma pasta e fiz uma listagem. A seguir está escrito:

`cd "their_file/"`;

`pwd`;

`ls -l`;

Me dá a seguinte saída:

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

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

Esta é minha senha:

/home/usuário/final

Como faço para corrigir isso? Eu acho que está executando a instrução cd e depois saindo da instrução. Estou usando a máquina Fedora.

Responder1

Os crases em torno de cada comando em seu script farão com que o shell pegue a saída do comando e executequecomo um comando.

Usar crases em torno de um comando equivale a colocar o comando dentro $( ... )(esta é a sintaxe preferida para capturar a saída de um comando).

A mensagem de erro /home/user/final: Is a directoryvem da kshtentativa de executar o resultado de pwdcomo um comando e, da mesma forma, total: command not foundda tentativa de executar o resultado de ls -l.

Remova os crases. Remova também o ponto e vírgula ( ;). Eles só serão necessários se você quiser colocar dois comandos na mesma linha:

cd dir; pwd

Seu script deve ser parecido com

#!/bin/sh

cd "their_file"
pwd
ls -l

Observe que isso ainda será executado pwde ls -lse cdfalhar. Para sair do script se cdfalhar:

#!/bin/sh

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

Isso usa o fato de que cdretorna um valor diferente de zerostatus de saídase falhar. O ||(lógicoou) na frente de exit 1significa que o script executará a exitinstrução se cdretornar "falso" (que em scripts shell é o que significa um status de saída diferente de zero).


A razão pela qual você obtém /home/user/final: Is a directoryenão /home/user/final/their_file: Is a directoryé porque o cdé executado em umsub-shell(que é o que acontece quando você coloca crases ou dentro de $( ... )). Como é executado em um subshell, a alteração real do diretório de trabalho não é refletida no shell pai (seu script).

Pelo mesmo motivo, você notará que quando o script terminar de ser executado, você ainda estará no mesmo diretório de quando invocou o script, e não no their_filediretório.

Para obter mais informações sobre esse assunto específico, consulte "por que a função cd no script não funciona" e "Script para alterar o diretório atual (cd, pwd)" (e outras questões semelhantes).

informação relacionada