- ベストアンサー
envでsourceコマンド等シェルビルトインコマンドを実行する方法
envで外部コマンド(例less)の実行はできますが、内部コマンド(mv等)の実行ができません。これを行う方法はありますでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
builtin の man(オンラインマニュアル)を見ると内部コマンド(Shell組込み コマンド[builtinコマンド])の一覧がでていると思います。 例えば、 if コマンドは sh では組込みコマンドですが csh では外部 コマンドですし、sourceコマンドは cshの組込みコマンドですが sh では 使えません。 sourceはcshの組込みコマンドですがlessもmvも外部コマンドです。 ※ mvが内部コマンドだと思われたのは何故かな。 csh(sourceコマンドについて書かれているので対話シェルとして csh系のシェルをご利用なさっていると思いました)環境でしたら which コマンドを使って確認できますよ。 % which source % which mv % which less ※ 外部コマンドの場合にはファイル名が、内部コマンドの場合には 内部コマンドだと報告するメッセージが表示されると思います。 で、env 自体が外部コマンドですので通常 env からビルトインコマンドを 実行する必要はありません。(envコマンドを実行した時点で起動したShell とは別の環境が起動されてしまっておりその中で動いているので起動した Shellへ戻った時点では破棄されてしまっている操作となります) csh系のsourceコマンドやsh 系の . コマンド、{}によるグルーピング など新たな環境(サブシェル)の起動を抑止し実行する機能は実行中の Shellの環境を操作したい場合などに使うのだと思いますがenv コマ ンド(外部コマンド)を起動した時点で意味をなしません。 env で一時的に変数を設定せずとも source や . で実行するスクリプト の中で変数設定を行う事も可能ですので少し考えてみてください。 ※ 必要な場面はなさそう(他に手段がありそう)に感じてます。
補足
もう少し具体的に書いた形で再投稿してみます。