4

まず、私の語彙を修正したいと思います。ターミナルは、シェルのタイプ/バージョンであるbashの環境を提供すると思います。これは正しいです?

展開を高速化するために、開発プロセスで bash と shell をもっと活用しようとしています。ただし、成長して学んだコマンド以外の基本を理解し始めたばかりです。

繰り返しの多いタスクの一部を自動化するために、ターミナルで関数を作成し始めました。ターミナルを終了するまで、これはすべて見つけてダンディです。

シェルはインスタンスで実行されると想定しているため、ターミナルを終了するとそのインスタンスは失われます。シェルが .bash_history を残していることに気付きました。これも「history」を使用してアクセスでき、古いセッションの古い関数を確認できます。ただし、もちろん、実行しているようには見えません。

シェル スクリプトを作成できることは認識していますが、これによりコンパイルの問題が発生するだけでなく、スクリプトの保存場所に相対的に注意を払う必要があります。

質問: command(){} を使用して bash スクリプトを作成すると、ターミナルを閉じた後もスクリプトが保持されません。新しい端末セッションでシェルスクリプトに頼らずに古い機能にアクセスできるようにすることはできますか?


編集: また、従来の手段を使用してこれに関する問題を広範囲に見つけようとしたことにも言及したかったのですが、検索用語の「保存」と「終了」はシェルの他の側面につながることがよくあります。

4

4 に答える 4

2

履歴からコマンドを実行する方法については、Bash Reference Manual のUsing History Interactivelyセクションを参照してください。

たとえば、入力!?fooして押すEnterと、「foo」を含む最新のコマンドが実行されます。すぐに実行するのではなく、必要に応じてコマンドを編集して確認できるように、shopt -s histverify histreedit自分の中に入れたいと思っています。~/.bashrc

呼び出して実行する履歴エントリを検索するために使用できるキーストロークについては、 「履歴を操作するためのコマンド」セクションも参照してください。

たとえば、Ctrl-rを押して入力fooすると、「foo」を含む最新のコマンドが呼び出されます。Ctrl-をさらに何回か押すrと、さらに一致するコマンドを逆方向に検索し続けることができます。Enter現在表示されているものを実行する準備ができたら を押すか、検索を中止するにはCtrl-gを押します。

に追加stty -ixonすると、後方検索を開始した後で履歴を前方検索するために-を~/.bashrc使用できます。Ctrls

もちろん、関数を編集~/.bashrcして追加することで関数を保存できます。私は自分が作成したファイルに関数を保存し、そのファイルのソースに~/bin/functions行を追加することを好みます。~/.bashrcのように見えます. ~/bin/functions

/usr/local/bin大きなスクリプトはまたはに保存し~/binます。前者はすでにパスにあるはずで、後者を編集してパスに追加できます~/.bashrc

于 2012-06-22T01:16:30.317 に答える
2

最初のステートメントは正しいです。端末インスタンスは、ある種のシェル (bash、sh、csh) を実行します

それらを ~/.bashrc ファイルに追加するか、保存したスクリプト パス (コンパイルは不要) を PATH 変数に追加できます。

いつでもすばやくアクセスできるように、スクリプトを /usr/local/bin にコピーすることもできます。それらが相対的にどこにあるかを追跡する必要はありません。これは非常に便利で、スクリプトを他のユーザーが使用できるようにします (権限が正しく設定されている場合は使用できません)。

于 2012-06-21T23:37:50.310 に答える
1

コマンドラインで関数を入力した後、コマンドライン編集を使用してそれらを呼び出すことができます(@Dennis Williamsonが述べたように)が、より簡単な方法があります:declare -f。このコマンドは、現在のすべての機能を一覧表示し、それらをファイルにリダイレクトできます。

home/user1> function myfunc {
> echo "Hollow world!"
> }

/home/user1> declare -f > myfuncs
/home/user1> more myfuncs
myfunc () 
{ 
    echo "Hollow world"
}

Bashが関数構文をKornシェルからBourneシェルに変更する方法に注意してください。幸い、Bashでは(ksh93とは異なり)2つの間に違いはありません。

関数をロードする必要がある場合、それは簡単なことです。

/home/user1> source myfuncs
/home/user1> myfunc
Hollow world!

ちなみに、実行権限は必要ありません。読むだけです。(他の人が言っているように)これをスタートアップファイルの1つに追加することができます.bashrc

于 2012-06-22T08:11:15.717 に答える