バッククォートまたは $(..) の cd コマンドが新しいディレクトリに変更されないのはなぜですか。単一のコマンドでそれを行う方法、つまりエラーをキャプチャしてディレクトリを変更する方法。
[root@linux ~]# pwd
/root
[root@linux ~]# cmdMsg=`cd /tmp 2>&1`
[root@linux ~]# pwd
/root
バックティックは別のプロセスを生成し、別々に実行するためです。そのため、そのプロセスで cd を実行しますが、現在のプロセスの作業ディレクトリは変更しません。
コマンドが成功したかどうかを確認する必要があり、ディレクトリを変更したい場合は、終了コードを確認できます。
cd /tmp
retval = $?
if [ $retval -gt 0 ]; then
echo "cd failed"
fi
子プロセスは、親プロセスの環境を変更できません。
pwd
`cd /tmp 2>&1`
pwd
これは、cd を実行するために開いた新しいシェルのコンテキスト内にあるため、たとえば次のように試してください。
cmdMsg=`cd /tmp; pwd`
echo $cmdMsg
/tmp にいたことが表示されます
;
1 つのコマンドですべてを実行する場合は、コマンドを で区切ります。
例えば:
cd /; ls; cd ~; ls; cd /var; ls
しかし、あなたの場合の問題は、 cd が新しく生成されたシェルで実行されることです。これは現在のシェルには影響しません。