我试图从 A 路径更改为 B 路径时的目录,如下所示
pwd|awk '{if($1=="/") cd /tmp/}'
awk: syntax error near line 1
awk: illegal statement near line 1
请建议
答案1
您可以使用system()
inawk
来运行任何命令,但不能使用它来更改目录,因为它在子 shell 中运行该命令,因此您将在子 shell 中更改目录,该子 shell 将立即退出。命令如下:
pwd|awk '$0 == "/"{system("cd /tmp")}'
但正如我所说,这是行不通的。如果您echo
在命令前面添加,您可以看到它实际上也在您期望的时候运行:
$ cd /
$ pwd|awk '$0 == "/"{system("echo cd /tmp")}'
cd /tmp
$ cd /home
$ pwd|awk '$0 == "/"{system("echo cd /tmp")}'
我认为最好只使用和if
声明:
if [ "${PWD}" = '/' ];then
cd /tmp
fi
答案2
cd
从内部调用awk
是可能的(使用system()
,没有被awk
调用的命令cd
),但不会做太多事情。特别是,它不会更改启动的 shell 的当前工作目录awk
。工作目录是环境的本地目录,并且awk
任何其他进程或子 shell 都在自己的环境中运行,从其父进程继承(并且不能从子进程更改父进程的环境)。
如果您只想查看当前目录是否为根目录以及cd
是否/tmp
为根目录,则可以直接在 shell 中执行以下操作:
[ "$PWD" = "/" ] && cd /tmp