0

アプリケーションフォルダーの1つにスクリプトがあります。cd通常、Unixボックスのその場所に移動して、スクリプトを実行します。

UNIX> cd My\Folder\

My\Folder> MyScript

これにより、必要な結果が出力されます。

Bashスクリプトでこれを行う方法がわかりません。次のことを行いました

#!/bin/bash
mydir=My\Folder\
cd $mydir
echo $(pwd)

これにより、基本的に、必要なスクリプトを実行するための適切なフォルダーに配置されます。しかし、コードでスクリプトを実行する方法がわかりませんか?

4

4 に答える 4

2

MyScript(とは対照的に)を呼び出すことができる場合./MyScript、明らかに現在のディレクトリ (".") は PATH の一部です。(ちなみに、これは良い考えではありません。)

つまりMyScript、次のようにスクリプトを呼び出すことができます。

#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript

私が言ったように、./MyScriptより良いでしょう(あいまいではありません)。ディレクトリ区切り文字に関する Michael Wild のコメントを参照してください。

if一般的に言えば、Bash は組み込みキーワード ( 、など)whileに解決されないものはすべてdo、PATH のどこかにある実行可能ファイルまたはスクリプト (*) の呼び出しと見なします。次に、PATH 内の各ディレクトリをチェックして、その名前の実行可能ファイル / スクリプトを探し、最初に見つかったものを実行します (これは、MyScript実行しようとしているものである場合とそうでない場合があります)。そのためMyScriptこのディレクトリ内 ( ./) を意味することを指定することをお勧めします。

(*): もちろん、その名前の関数が定義されている場合を除きます。

于 2013-04-17T06:33:40.503 に答える
2
#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
于 2013-04-17T06:44:03.513 に答える
1

名前を引用符で囲みます。これにより、読み取りが容易になり、間違いを防ぐことができます。

#!/bin/bash
mydir="My Folder"
cd "$mydir"
echo $(pwd)
./MyScript
于 2013-04-17T06:37:06.070 に答える
1

あなたのニックネームがすべてを物語っています;-)

を含まないコマンドがプロンプトに入力されると/、Bash は最初にそれがエイリアスか関数かをチェックします。次に、それが組み込みコマンドであるかどうかをチェックし、その場合にのみ で検索を開始しPATHます。これは、コマンドを検索するためのディレクトリのリストを含むシェル変数です。あなたの場合.(つまり、現在のディレクトリ)は にあるPATHようです。これは、一般的にかなり悪い考えであると考えられています。

コマンドに が含まれている場合、/内のルックアップPATHは実行されません。代わりに、完全一致が必要です。a で始まる場合/は絶対パスであり、ファイルが存在する必要があります。それ以外の場合は相対パスであり、ファイルは現在の作業ディレクトリに対して相対的に存在する必要があります。

したがって、2 つの許容可能なオプションがあります。

  1. にあるディレクトリにスクリプトを配置しますPATH。または、スクリプトを含むディレクトリをPATH変数に追加します。

  2. 絶対パスまたは相対パスを使用してスクリプトを呼び出します。

于 2013-04-17T06:38:51.790 に答える