「./command」と「bashコマンド」の違いは何ですか

「./command」と「bashコマンド」の違いは何ですか

1行だけを含む単純なbashスクリプトファイルがあります。

rvm gemset use --create 2.0.0@PRJ_NAME

このスクリプトを実行すると:

./scriptname.sh

RVMからよく知られているエラーメッセージを受け取りました。

RVM is not a function, select.....

しかし、スクリプトを実行すると

bash scriptname.sh

すべてがうまくいった。

誰かが私に違いを説明できますか?

答え1

大きな違いがあります。

testscriptという次のスクリプトを試してみましょう(ハッシュバンで見られるように/ bin / kshを使用するように設定されています)。

#!/bin/ksh
#im testscript
cd /proc/$$
file exe

まず、./で実行してみましょう。

$ ./testscript
exe: symbolic link to /bin/ksh93

ここでbashを呼び出します。

$ bash testscript
exe: symbolic link to /bin/bash

違いは見えますか?スクリプトが使用するインタプリタは2番目のコマンドで変更されるため、スクリプトが何かに依存する場合ケシスクリプトが他の手段に依存する場合だけでなく、特定のコードに対しても破損します。強く打つ特定のコードを削除し、最初のコマンドでそのコードを削除します。

実行できる他のテストは、2つの異なる実行でecho $ PATHです。

関連情報