2011-01-14 28 views
2

ディレクトリを変更して新しい作業ディレクトリで既存のスクリプトを実行するbashスクリプトを作成しようとしています。指定されたフォルダでスクリプトを実行するためのクイックbashスクリプト?

これは私がこれまでにしたものである:

#!/bin/bash 
cd /path/to/a/folder 
./scriptname 

SCRIPTNAMEがに/パス/に/ A /フォルダが存在する実行可能ファイルです - と(言うまでもない)、私はそれを実行する権限を持っていますスクリプト。私はこのことを念頭numbingly簡単なスクリプト(上記)を実行したときに

はしかし、私は応答を得る:

SCRIPTNAME:そのようなファイルやディレクトリは

ありません、私は何をしないのです!コマンドはCLIで入力したときに期待どおりに動作するので、エラーメッセージを説明するのは駄目です。これをどうやって解決するのですか?

+0

ええ、1つか2つを含む多種多様な応答で判断すると、どうしてもうまくいかなくてはならないのですが、私は助けてもらえません。確かに、フォルダに入れてスクリプトを実行する簡単な方法が必要ですフォルダ? – skyeagle

+0

スクリプトをそのフォルダにコピーしていません。 ./scriptnameは、スクリプトがそのフォルダにあることを意味しますが、そうではありません。正しいパスを指定してスクリプトを呼び出します。 – BZ1

+0

あなたはあなたが望むエイリアスとして以下を追加できますか? "bash /path/to/script/script.sh" – Hemm

答えて

3
cd /path/to/a/folder 
pwd 
ls 
./scriptname 

は、私は次のよう変更したスクリプトを示唆しています。

+0

私はすでにそれをしています(私は私の仕事でそれを示していませんでした - 物事を単純にする)。pwdは、CDが動作していて、ファイルが存在することを示しています。したがって、私が得ているエラーメッセージに私の驚きがあります。 – skyeagle

+0

これは最も近い答えです。私はCLIで自動競合を使用していたので、.sh拡張子を入力しませんでした。一方、スクリプトでは、私は完全なファイル名を使用する必要があります – skyeagle

+0

ああ、あなたは絶対に完全なファイル名が必要です。 – Satya

4

あなたのスクリプトを見ると、最初のディレクトリにあるスクリプトを起動したいと思うと思います。実行する前にディレクトリを変更するので、動作しません。それはそれはやって考えるものをお見せwhich'll

#!/bin/bash 
SCRIPT_DIR=$PWD 
cd /path/to/a/folder 
$SCRIPT_DIR/scriptname 
+0

いいえ、あなたは私のことを誤解しているはずです。私は/ path/to/a/folderにスクリプトを走らせたいのです(これは私がcd/path/to/a/folder 'を最初に使った理由です)。 – skyeagle

+0

わかりました。私はあなたが手でそれを実行するときにすべてが大丈夫だと思います。私の唯一の提案は '-xv'オプションを'#! '行に追加し、何が印刷されているかを確認することです。 – gabuzo

1

私は通常私の便利なスクリプトディレクトリにこのようなものを持っている:

#!/bin/bash 

# Provide usage information if not arguments were supplied 
if [[ "$#" -le 0 ]]; then 
     echo "Usage: $0 <executable> [<argument>...]" >&2 

     exit 1 
fi 

# Get the executable by removing the last slash and anything before it 
X="${1##*/}" 

# Get the directory by removing the executable name 
D="${1%$X}" 

# Check if the directory exists 
if [[ -d "$D" ]]; then 
     # If it does, cd into it 
     cd "$D" 
else 
     if [[ "$D" ]]; then 
       # Complain if a directory was specified, but does not exist 
       echo "Directory '$D' does not exist" >&2 

       exit 1 
     fi 
fi 

# Check if the executable is, well, executable 
if [[ -x "$X" ]]; then 
     # Run the executable in its directory with the supplied arguments 
     exec ./"$X" "${@:2}" 
else 
     # Complain if the executable is not a valid 
     echo "Executable '$X' does not exist in '$D'" >&2 

     exit 1 
fi 

使用方法:これらの条件の下で、このようなエラーメッセージの

$ cdexec 
Usage: /home/archon/bin/cdexec <executable> [<argument>...] 
$ cdexec /bin/ls ls 
ls 
$ cdexec /bin/xxx/ls ls 
Directory '/bin/xxx/' does not exist 
$ cdexec /ls ls 
Executable 'ls' does not exist in '/' 
+0

Erm、スクリプト内のいくつかのコメントはいいです - 現時点ではPerl(つまりgobbledygook)のように見えます。 – skyeagle

+0

@skyeagle:いくつかのコメントと使用例を追加しました – thkala

+0

@thkala:whisスクリプトを書き直す方法機能として? – niXman

0

1つの供給源は、壊れシンボリックリンクです。

ただし、スクリプトはコマンドラインから実行したときに機能します。私はまた、ディレクトリがあなたが期待するもの以外の何かをしているシンボリックリンクであるかどうかを調べるでしょう。

cdではなくフルパスでスクリプト内で呼び出すと機能しますか?

#!/bin/bash 
/path/to/a/folder/scriptname 

コマンドラインからそのように呼び出されるとどうなりますか?

関連する問題