`env <command>`は何をしていますか?


37

コマンドは何をしenv ls -alていますか?

Linuxのテストがあり、「エイリアスではなくコマンドを直接実行する方法」という質問がありました。
コマンドの前に特別な記号を付けるような解決策があることは知っていましたが、忘れていました。今私はそれがわかっています\。(この投稿から読みます)。

しかし、エイリアスを取り除くためにコマンドの前にを付けることができることをどこかで読んだことも覚えていますenv。私はそれをやったがうまくいくようだが、私の答えは間違っていると判断された。私は読んでinfomanenv、あまりにも多くを理解していませんでした。

何をしenvているのかenv <command>envそれ自体について議論することなく正確にしていますか?


ノート、私はあると考えることができ、これを行うための3つの方法としてenv <command>command <command>\<command>。私の意見では、あるテストenv <command>が無効であると言った場合、そのテストは壊れています。
パトリック

@Patrick:クリスが言ったように、そこにエイリアスなる可能性があるため、それは壊れていないcommandか、env`\`のみ許容の答えになるだろうています。
ピエールアラード

1
@ArlaudPierreと `\`はposixで(エイリアスエスケープとして)定義されていないため、移植性がありません。だから、他のものよりも受け入れられません。
パトリック

@パトリック:真、真。そのためには、テストの正確な境界を知る必要があります。しかし、いずれにせよ、「env」の回答は受け入れられないものであることがわかり、あまり正直ではありません。その点については同意しなければなりません。
ピエールアラード

Guysは、テストは(Linuxの今、他の人を教えるLPI認定EX-システム管理者、)あまりにも人間によって検証した:)私は、検証者に訴え、に行ってきましたmanし、何を理解していなかったenv、正確にやって。この投稿の後-それは明らかであり、私の答えはレビューされました(受け入れられました)。ありがとうございます!
ALZ

回答:


38

このコマンド

env name=value name2=value2 program and args

コマンドを実行しているprogram and argsことにより、指定された環境変数と値を使用して現在の環境を拡張することにより形成された環境でname=valuename2=value2。のような引数を含めない場合name=value、現在の環境はそのまま渡されます。

エイリアスに関して発生する重要なことは、envは外部コマンドであるため、エイリアスの「知識」がないことです。エイリアスは、通常のプロセスモデルの一部ではなく、直接プログラムに影響を与えないシェル構造です。シェル以外のプログラム(envなど)によって実行されます。envが単に合格program and argumentsのexec(のようなコールexecvpのためにPATHを検索します、program)。

基本的に、このようなenvの使用は、エイリアス、シェル関数、シェル組み込みコマンド、およびコマンド位置引数(プログラム名など)を置換またはオーバーライドする可能性のあるその他のシェル機能を回避する(ほとんど)シェルに依存しない方法です。もちろん、envエイリアスまたはシェル関数です!envエイリアスであることが心配な場合は、フルパスを入力できます(たとえば/usr/bin/env、異なる場合があります)。


24

env(コマンドエイリアスルックアップを回避する以外に)のもう1つの重要な用途はPATH、コマンドを検索することです。これは絶対パスが必要な場合に重要ですが、システムによって異なります。

たとえば、Bashスクリプトを開始すること#!/bin/bashは大丈夫ですが、合理的なすべてのシステムに含まれている#!bashにもかかわらず、そうではありません。/binPATH

私は頻繁に通常で始まるPythonプログラム、でこれを遭遇 #!/usr/bin/env pythonの完全な、システムに依存するパス指定しないようにpython、それはまだその必要があること、しかし、(実行可能なノートをenv中に存在し/usr/bin、これははるかしかし、パイソンの場所よりも一般的であり、バイナリ)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.