回答:
毎回ドットを入力せずにこれを行う方法はありますか?たとえば、スクリプト自体から親シェルに変更するコマンドはありますか?
あるとは思いません(タイピング以外はsource somescript.sh、おそらくあなたが探しているものではないでしょう^^)。
で通常どおりスクリプトを実行すると./somescript.sh、シェルはこのコマンドを分岐して実行します。コマンドをカーネルに渡し、カーネル#!はスクリプト内の行を解析することでこのコマンドの実行方法を決定します。次に、カーネルは指定されたインタープリター(この場合はおそらくbashサブシェル)を起動します。そのためsomescript.sh、環境への変更は、親シェルに影響を与えることなくサブシェルで分離されます。
別のプロセスを起動せずにシェルにスクリプト自体を読み取らせたい場合は、.or sourceキーワードを使用して明示的に通知する必要があります。
alias、スコットが示唆したように、コマンドでサブシェルを作成しないように言うことができます。
./somescript.sh外部プログラムとして実行する場合、非エクスポート変数へのアクセス、変数の設定、現在のディレクトリの変更など、実行中のシェルプロセス内では何もできません。これを回避する方法はありません。
(まあ、オーケー、サブプロセスからデバッガーを実行し、親プロセスのメモリを微調整できるかもしれません。しかし、それを試してみると、最も可能性の高い結果は親シェルのクラッシュです。)
実行する必要があります. ./somescript.sh。必要に応じてエイリアスまたは関数の背後に非表示にすることができますが、エイリアスまたは関数の定義は親シェルで行う必要があります。
実行しようとしているスクリプトは実行可能ではないと思います。chmod a+x somescript.shユーザー、グループ、およびその他(ugo)の実行ビットをそのファイルに追加します。ファイルの最初の行にも#!が必要です。上のような行#!/bin/bash。
ls -l somescript.shファイルのrwxトリプレット(読み取り/書き込み/実行)が表示されます。ファイルを所有していると仮定すると、少なくとも最初のセットにはxが必要です。
export PATH=$PATH:/usr/local/bin/ usr / local / binを$ PATHに追加するなど、スクリプトで必要な変数をエクスポートできない場合は、実行中の環境変数を変更するためにファイルを入手する必要があります。この質問は、「実行中のシェルの環境変数をbashスクリプトからプログラムで変更するにはどうすればよいですか?」です。スクリプト. ./somescript.shは正常に実行されています。dotコマンドを使用してファイルをソースしています。tcshは同じことに対して「ソース」を使用します。