如何在awk中运行shell命令

如何在awk中运行shell命令

我试图从 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

相关内容