なしで現在のシェルでスクリプトを実行します。コマンドの前


26

スクリプトを現在のシェルで実行する必要がある場合は、コマンドの前にドットを追加することで実現できます。

   . ./somescript.sh

毎回ドットを入力せずにこれを行う方法はありますか?たとえば、スクリプト自体から親シェルに変更するコマンドはありますか?

回答:


22

正確にあなたが望むものではないかもしれませんが、あなたはすることができます:

alias somescript.sh='. ./somescript.sh'

2
これで私の問題は完全に解決しました。ありがとうございました!
-alu

8

毎回ドットを入力せずにこれを行う方法はありますか?たとえば、スクリプト自体から親シェルに変更するコマンドはありますか?

あるとは思いません(タイピング以外はsource somescript.sh、おそらくあなたが探しているものではないでしょう^^)。

で通常どおりスクリプトを実行すると./somescript.sh、シェルはこのコマンドを分岐して実行します。コマンドをカーネルに渡し、カーネル#!はスクリプト内の行を解析することでこのコマンドの実行方法を決定します。次に、カーネルは指定されたインタープリター(この場合はおそらくbashサブシェル)を起動します。そのためsomescript.sh、環境への変更は、親シェルに影響を与えることなくサブシェルで分離されます。

別のプロセスを起動せずにシェルにスクリプト自体を読み取らせたい場合は、.or sourceキーワードを使用して明示的に通知する必要があります。


詳細な説明をありがとう。:)今、私は呼び出されたスクリプトからこれを行う方法がないことがわかりますが、親シェルはalias、スコットが示唆したように、コマンドでサブシェルを作成しないように言うことができます。
-alu

1

./somescript.sh外部プログラムとして実行する場合、非エクスポート変数へのアクセス、変数の設定、現在のディレクトリの変更など、実行中のシェルプロセス内では何もできません。これを回避する方法はありません。

(まあ、オーケー、サブプロセスからデバッガーを実行し、親プロセスのメモリを微調整できるかもしれません。しかし、それを試してみると、最も可能性の高い結果は親シェルのクラッシュです。)

実行する必要があります. ./somescript.sh。必要に応じてエイリアスまたは関数の背後に非表示にすることができますが、エイリアスまたは関数の定義は親シェルで行う必要があります。


0

実行しようとしているスクリプトは実行可能ではないと思います。chmod a+x somescript.shユーザー、グループ、およびその他(ugo)の実行ビットをそのファイルに追加します。ファイルの最初の行にも#!が必要です。上のような行#!/bin/bash

ls -l somescript.shファイルのrwxトリプレット(読み取り/書き込み/実行)が表示されます。ファイルを所有していると仮定すると、少なくとも最初のセットにはxが必要です。


スクリプト自体は正常に機能しますが、シェルの環境変数を変更できるように現在のシェルで実行したいです。
-alu

export PATH=$PATH:/usr/local/bin/ usr / local / binを$ PATHに追加するなど、スクリプトで必要な変数をエクスポートできない場合は、実行中の環境変数を変更するためにファイルを入手する必要があります。この質問は、「実行中のシェルの環境変数をbashスクリプトからプログラムで変更するにはどうすればよいですか?」です。スクリプト. ./somescript.shは正常に実行されています。dotコマンドを使用してファイルをソースしています。tcshは同じことに対して「ソース」を使用します。
AR Diederich

変数の変更は単なる例です。私の質問は、実際にそれを書かずに(たとえば、スクリプト自体から)ドットをシェルに伝えることができるかどうかです
-alu

ドットは簡単に忘れられる可能性があり、スクリプトの動作を完全に変更する可能性があります。
-alu

0
export PATH=$PATH:.

そのコマンドをシェルで実行するか、シェル構成ファイルに追加すると、現在のディレクトリがPATH変数に追加されます。PATH変数は、コマンドを発行したときに実行するバイナリをシェルが検索するディレクトリのリストです。

これにより、現在のディレクトリで任意の実行可能ファイルを実行できます。 ./


1
OPは、ファイル名の一部では.ない最初のものについて尋ねて./います。./somescriptを実行しても、現在のシェルでは実行されません. ./somescript
アントン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.