以下のようにAパスからBパスにdirを変更しようとしています
pwd|awk '{if($1=="/") cd /tmp/}'
awk: syntax error near line 1
awk: illegal statement near line 1
提案してください
cd
内からawk
を呼び出すことは可能です(system()
を使用すると、awk
と呼ばれるcd
コマンドはありません)が、あまりしません。特に、awk
を開始したシェルの現在の作業ディレクトリは変更されません。作業ディレクトリは環境に対してローカルであり、awk
およびその他のプロセスまたはサブシェルは、親プロセスから継承された独自の環境で実行されます(親プロセスの環境を子プロセスから変更することはできません)。 )。
現在のディレクトリがルートディレクトリであるかどうかを確認し、ルートディレクトリである場合はcd
から/tmp
を確認したい場合は、シェルで直接確認できます。
[ "$PWD" = "/" ] && cd /tmp
awk
のsystem()
を使用して任意のコマンドを実行できますが、サブシェルでコマンドを実行するため、ディレクトリを変更するために使用することはできません。そのため、サブシェルのディレクトリを変更します。すぐに終了します。コマンドは次のようになります。
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