ターミナル(コマンドライン)を使用してUnixバイナリを実行するためのより多くの方法はありますか?例えばecho
:
$ /bin/echo "test"
test
$ cd /bin/
$ ./echo "test"
test
$ eval echo "test"
test
答え1
バイナリを実行できるシェルコマンドラインまたはシェルスクリプト行にコードを表現する方法はいくつかあります。それらはすべてシェルコマンドの実行として要約されます。コマンドがファイルを参照する場合、シェルはファイルの実行を試みます。ファイル実行権限があると、試行は成功します。ファイルはバイナリ実行可能ファイル、または最初の行でソルバーを参照するスクリプト(「#!」で始まる)、または単純な一般データ(テキストなど)です。このとき、実行可能であれば実行または解釈されます。シェルにはコマンドを表現するさまざまな方法があります。可能性は無限です。
答え2
ご注意ください、Sparhawkがコメントで指摘したように最初の2つの例は本質的に同じことを行い(パスルックアップを実行するのではなくパスを使用してプログラムを呼び出す)、そのロジックによると、与えられたプログラムを実行する方法は事実上無限です。
とにかく、シェルでプログラムを実行する方法には少なくとも4つの方法があると言いたいです[1]:
シェル組み込み関数:一部のコマンド(
echo
Bashのコマンド自体など)はシェルで実装されているため、対応する外部ユーティリティ(存在する場合)は呼び出されません。$ echo foo foo
ルートを探す:シェルが環境変数に含まれる各ディレクトリから必要なプログラムを検索するとき
PATH
。$ cat <<< foo foo
直接電話する:フル/相対パスを使用してプログラムを呼び出すとき。
$ /bin/echo foo foo
$ ../../bin/echo foo foo
間接通貨:そのプログラムが別のプログラム(組み込みプログラムまたは外部プログラム)によって呼び出される場合。
$ eval echo foo foo
$ command echo foo foo
$ sh -c 'echo foo' foo
1.あなたが言ったことを知るバイナリファイル。スクリプトはシェルでも実行できるため、より一般的な用語を使用します。