• ベストアンサー

envでsourceコマンド等シェルビルトインコマンドを実行する方法

envで外部コマンド(例less)の実行はできますが、内部コマンド(mv等)の実行ができません。これを行う方法はありますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

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 や . で実行するスクリプト の中で変数設定を行う事も可能ですので少し考えてみてください。 ※ 必要な場面はなさそう(他に手段がありそう)に感じてます。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

mvは内部コマンドではありません。 具体的にどういったことをしたいのでしょうか?

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

a)bsh系で、環境変数代入を前置して、コマンドを実行する。 b)bsh/cshのオプション-cを使って、コマンドを実行する。 ――とか。詳しくは、shのmanをご覧ください。 内部コマンドってのが、シェルのbuiltinコマンドのことですが。

goovbs2
質問者

補足

もう少し具体的に書いた形で再投稿してみます。

関連するQ&A