无法 cd 进入 Linux 机器中的文件夹。说文件/文件夹不存在

无法 cd 进入 Linux 机器中的文件夹。说文件/文件夹不存在

我已经编写了一个测试 ksh 文件,将其放入文件夹中并进行列表。写如下:

`cd "their_file/"`;

`pwd`;

`ls -l`;

给我以下输出:

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

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

这是我的密码:

/home/用户/最终

我该如何解决?我猜它正在执行 cd 语句,然后退出该语句。我正在使用 Fedora 机器。

答案1

脚本中每个命令周围的反引号将导致 shell 获取命令的输出并执行作为命令。

在命令周围使用反引号相当于将命令放入其中$( ... )(这是捕获命令输出的首选语法)。

错误消息/home/user/final: Is a directory来自ksh尝试将 的结果pwd作为命令执行,同样,也total: command not found来自尝试执行 的结果ls -l

去掉反引号。同时删除分号 ( ;)。仅当您想将两个命令放在同一行时才需要这些:

cd dir; pwd

你的脚本应该看起来像

#!/bin/sh

cd "their_file"
pwd
ls -l

请注意,如果失败pwd,这仍然会执行。如果失败则退出脚本:ls -lcdcd

#!/bin/sh

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

cd这利用了返回非零的事实退出状态如果失败了。||(逻辑或者) 前面的表示如果返回“false” exit 1,脚本将继续执行该语句(这在 shell 脚本中是非零退出状态的含义)。exitcd


你得到的原因/home/user/final: Is a directory不是 /home/user/final/their_file: Is a directory是因为是cd在 a 中执行的子壳(当你把它放在反引号或里面时会发生这种情况$( ... ))。由于它是在子 shell 中执行的,因此工作目录的实际更改不会反映在父 shell(您的脚本)中。

出于同样的原因,您会注意到,当脚本执行完毕后,您仍然位于调用脚本时所在的目录中,而不是位于 目录中their_file

有关此特定事物的更多信息,请参阅“为什么脚本中的 cd 功能不起作用“ 和 ”更改当前目录的脚本(cd、pwd)“(以及其他类似的问题)。

相关内容