- ベストアンサー
envと「cd」の同時実行ができない
[hoge@localhost ~]$ env TESTVAL=1 cd /home env: cd: そのようなファイルやディレクトリはありません 上記のエラーが発生します。 Envとcdは同時に実行できないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
env は外部コマンド(ユーティリティソフト)を実行します。 ディストリビューションによって必ずしもとはいえないと思いますが エラーを発生したディストリビューションではcdコマンドが外部 コマンドとして用意されていなかったのでしょう。 ※ 外部コマンドとして用意されていても普通には使われる事が ないでしょうし、使えても混乱するだけだと思います。 ========== -= 存在するFreeBSDで試してみると 1= %cd /tmp 2= %pwd 3= /tmp 4= %/usr/bin/cd /usr 5= %pwd 6= /tmp 7= % ======= 4のcd(外部コマンド)は、cdが実行されるプロセス(対話シェルの 子プロセス)のカレントディレクトリを/usrに変更するが、その cdコマンドが終了した時にその環境は破棄されるので対話シェル の環境は変わらない。cd コマンドがシェルの内部コマンドとして 実装されている理由はシェルから見て自身の内部で実行する事に よって自身の環境(カレントディレクトリ)を設定するため。 外部コマンドとして用意してもあまり意味はない。 ========== そんな場合には cd は sh系シェルやcsh系シェルの内部コマンド (builtinコマンド)なので外部コマンドとしては存在してません。 そのため、無理に使いたいなら次のような形式で行えば使える かも知れません。 % env TESTVAL=1 csh -c "cd /home ; ls" user1 user2 user3 ※ ls はcd が実行された事を確認するために追加してます 私の常用しているFreeBSDにはcdコマンドが外部コマンドとしても 用意されています。その内容はシェルスクリプトなのですが。 % file /usr/bin/cd /usr/bin/cd: Bourne shell script text executable % cat /usr/bin/cd #!/bin/sh # $FreeBSD: src/usr.bin/alias/generic.sh,v 1.1.16.1 2005/11/04 18:21:37 cperciva Exp $ # This file is in the public domain. builtin ${0##*/} ${1+"$@"}