当连接到ftp服务器时,使用cd,pwd,ls等导航远程服务器。 对于本地服务器,有一些特殊的命令,如lcd,lpwd等,以及!命令。
虽然!ls和!pwd工作,但为什么呢!cd ..不起作用?
答案 0 :(得分:3)
我认为需要在原始问题陈述中定义“不工作”。
在ftp
你可以做的事情:
`!cd foo`
如果foo
是本地文件夹,则不会产生错误。但是,当使用来自!
的{{1}}(或通常来自任何支持“转义”命令的命令到shell的方式,例如ftp
)时,vi
的每个实例用法是它自己的子shell。因此,当命令完成时,!
所采取的操作不再有效,您将回到原来的位置。所以:
cd
ftp> !pwd
/home/mortimer
ftp> !ls
doc misc
ftp> !cd doc
ftp> !ls
doc misc
似乎“不起作用”,但实际上确实有效。只是当cd
的shell实例完成后,!
的效果不再存在(shell的每个实例都保持自己的工作目录状态)。
尝试这种方式来说明:
cd
所以在这里,ftp> !ls
doc misc
ftp> !ls doc
foo.txt bah.txt
ftp> !cd doc ; ls
foo.txt bah.txt
ftp> !ls
doc misc
的工作方式与在{em> shell的相同实例中执行的cd
命令所示。
这就是ls
提供更改本地目录(ftp
)的唯一命令的原因。 lcd
命令不在lcd
的子shell中执行,而是实际更改了它正在运行的当前工作目录:
ftp
(以上是使用BSD ftp> !ls
doc misc
ftp> lcd doc
Local directory now /home/mortimer/doc
ftp> !ls
foo.txt bah.txt
程序运行,该程序在执行ftp
时显示“本地目录...”消息。)
答案 1 :(得分:0)
!
用于运行shell命令。该命令在子shell中运行。
cd
命令仅对子shell有效;它不会影响父进程。