次のように、ディレクトリをAパスからBパスに変更しようとしています。
pwd|awk '{if($1=="/") cd /tmp/}'
awk: syntax error near line 1
awk: illegal statement near line 1
提案してください
答え1
system()
inを使用してすべてのコマンドを実行できますが、サブシェルawk
でコマンドを実行するため、ディレクトリを変更するために使用することはできません。したがって、サブシェルのディレクトリを変更すると、サブシェルはすぐにシャットダウンされます。コマンドは次のとおりです。
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
awk
awk
cd
現在のディレクトリがルートであるか、ルートディレクトリであるかを確認するには、/tmp
シェルで直接次のことを実行できます。
[ "$PWD" = "/" ] && cd /tmp