1

3 つのインターネットの例を試して、bash シェル関数を作成し、xterm ターミナル経由で呼び出しましたが、成功しませんでした。

1-my 関数はファイル「example」に保存され、このファイルは非実行モードです。

2-私が書いたこのサンプルファイル内:

 #!/bin/bash 
           function quit {
               exit
           }
           function hello {
               echo Hello!
           }

3-xtermターミナルで、このファイルが配置されているフォルダーで、これらの2つの関数を次の方法で呼び出しました。

$./quit     $./hello    

そしてこのように:

$quit     $hello

それらのどれも機能しません。しかし、次の関数をスクリプトに変更して(関数ワードなしで)FILEを呼び出すと、機能します。

何が起こっているのですか?

ありがとう

4

4 に答える 4

3

関数定義を現在のシェル環境にロードするには、スクリプトをソースする必要があります。

# source script
. example

# call function
hello

# call function
quit
于 2013-07-31T10:28:55.960 に答える
1

関数定義を外部シェルで使用できるようにする必要があります。このためには、サンプル ファイルを入手する必要があります。

. example
quit
hello

することもできますsource example

于 2013-07-31T10:29:07.093 に答える
1

関数を記述したら、それらはスクリプト ファイル自体の内部でのみ表示されます。それらが外部に表示されるようにするには、関数を環境にエクスポートするようにスクリプトに指示する必要があります。

関数定義の後にexport -f quitandを追加してみてください。export -f hello

./and$演算子の混乱を解消しましょう。

最初の演算子./は、現在のディレクトリでスクリプトを呼び出したいときに使用されます。たとえば、スクリプトをいくつかのファイルで定義した場合script.sh、それを呼び出すことができます./script.sh(実行権限があることを確認してください - で追加できますchmod +x script.sh)。

2 番目の演算子$は、環境変数を調べるために使用されます。これらは、bash シェルでデフォルトで定義されている変数、またはユーザーが定義してシェルにエクスポートした変数です。シェルに次のように入力してみてください。

pi=3.14
echo $pi
3.14

ここで、$プレフィックスにより、作成した変数にアクセスできます。

于 2013-07-31T10:28:07.460 に答える
0

./quit または ./hello は、quit および hello という名前のファイルがあり、それらを実行することを意味します。$quit と $hello は、シェル ファイルで関数を定義するときに、quit と hello が事前定義されたコマンド ($PATH フォルダー内の実行可能ファイル、たとえば /usr/bin) であることを意味します。そのファイルでも使用する必要があります。

于 2013-07-31T10:30:43.727 に答える