コマンドとはenv ls -al
やってる?
私はLinuxのテストを受けましたが、「コマンドを直接実行する方法はありますが、エイリアスは実行しない」という質問がありました。
コマンドの前に特別な記号を付けるような解決策があることは知っていましたが、忘れていました。今では\
。 ( この投稿 から読み取ります)。
しかし、エイリアスを取り除くために、どこかでコマンドの前にenv
を付けることができることを覚えています。私はそれをしました、そしてそれはうまくいくようです、しかし私の答えは間違っているとみなされました。 info
でman
とenv
を読みましたが、あまり理解していませんでした。
env
は何をしていて、正確にenv <command>
env
自体の引数なし?
このコマンド
env name=value name2=value2 program and args
program and args
およびname=value
で指定された環境変数と値で現在の環境を拡張することによって形成された環境で、コマンドname2=value2
を実行します。 name=value
などの引数を含めない場合、現在の環境は変更されずに渡されます。
エイリアスに関して発生する重要な点は、envが外部コマンドであるため、エイリアスの「知識」がないことです。エイリアスは、通常のプロセスモデルの一部ではなく、シェル以外のプログラムによって直接実行されるプログラム(envなど)には影響しません。 envは単にprogram and arguments
をexec呼び出しに渡します(-execvpのように、program
のPATHを検索します) )。
基本的に、このようなenvの使用は、(ほとんど)シェルに依存しない方法であり、エイリアス、シェル関数、シェル組み込みコマンド、およびコマンド位置引数を置換または上書きする可能性があるシェル機能の他のビット(つまり、プログラム名)-もちろん、env
がエイリアスまたはシェル関数でない限り! env
がエイリアスであることを心配している場合は、フルパスを指定できます(例:/usr/bin/env
、ただし異なる場合があります)。
env
のもう1つの重要な使用法(コマンドエイリアスルックアップの回避は別として)は、PATH
でコマンドを検索することです。これは絶対パスが必要な場合に重要ですが、システムによって異なります。
たとえば、#!/bin/bash
がPATH
に含まれているにもかかわらず、#!bash
はそうではありませんが、/bin
でBashスクリプトを開始しても問題ありません。
これは、Pythonプログラムで頻繁に発生します。通常、プログラムはpython
実行可能ファイルの完全なシステム依存パスを指定しないようにするために#!/usr/bin/env python
で始まります(ただし、 env
が/usr/bin
に存在する必要がありますが、これはpythonバイナリ)の場所よりもはるかに一般的です。