2016-04-12 6 views
0

私はUNIXとシェルプログラミングの新人です。 chmodコマンドを使用して、コマンドラインのテキストファイルを実行可能にしようとしています。UNIXでコマンドファイルを実行できないのはなぜですか?

以下

はコードです:

$ls 
a aa aba chapt1 chapt2 chapt3 newprog 
$filename=ch 
$cat newprog 
echo a?* n* ${filename}* 
$chmod +x newprog 
$ls -l newprog 
-rwxr-xr-x 1 xxxxx xxxxx 25 Apr 12 09:50 newprog 

しかし、私は

newprog 

でNEWPROGを実行したとき、私はviのコマンドを使用してNEWPROGを作成し、私はパテを使用しています

newprog: command not found 

を得ました。 どちらの部分が間違っていましたか?


ベンジャミンWのおかげで、./newprogを使用するとファイルが実行可能になります。

しかし、結果は

aa aba newprog a aa aba chapt1 chapt2 chapt3 newprog 

である私は、重複があるなぜ私が期待した結果が

aa aba newprog chapt1 chapt2 chapt3 

あると思いますか?

+3

あなたのパスにない場合は、同じディレクトリにいる場合や完全なパスの場合は '。/ newprog'と呼ぶ必要があります。 –

+0

また、ファイルの上部に「shebang」を追加する必要があります。 https://stackoverflow.com/questions/8779951/how-do-i-run-a-shell-script-without-using-sh-or-bash-commands – dmb

+0

説明を参照してください。http://unix.stackexchange .com/questions/4430/why-do-use-to-execute-a-file –

答えて

2

セキュリティ上の理由から、UNIXは現在のディレクトリ内のファイルを直接実行するのではなく、PATH内のディレクトリからのみ実行します。これは、誰かが頻繁に使用するコマンドと同じ名前の悪質な実行可能ファイルを書き込み可能なディレクトリに置き、誰かが自分の権利でそれを実行することを望む攻撃を避けるためです。同じ理由から、.もPATHに入れないでください。

このようなファイルを実行する場合は、./filenameを使用してください。

拡張質問に答えるには:ファイル名がエクスポートされていないので、スクリプトが見る値は空です。したがって、最後のパターンは*で、すべてのファイル(ドットで始まらないファイル)と一致します。

期待される結果を得るには、export filenameを実行してください(これにより、シェルはファイル名変数を子プロセスに与えられた環境に置くように指示します)。

+0

ありがとうございます。それでは、$ filenameを動作させる方法は? – NewGuyComesIn

+0

ありがとうございます。エクスポートファイル名と./newprogを使用することで、私は期待した結果を得ました。 – NewGuyComesIn

+0

Boo hiss re:それに答えることで、後続の質問を励まします。メタについての議論を参照してください。 http://meta.stackoverflow.com/questions/296600/how-to-handle-an-ops-new-issues-that-appear-after-answeringにリンクされているさまざまな詐欺師 –

関連する問題