2017-12-27 28 views
0

シェルコピーを作成していますが、自家製プログラムを実行する際に問題があります。 javalswcなどのようなものを実行したいときには、すべてが問題ありません。PATH変数には既に存在するすべてのものです。execvpでプログラムを実行できるようにする

ここでは、元のlsのコピーである "myls"コマンドを実行できるようにしたいと考えています。私のプログラムはPATH変数に登録されていないので、execvp("myls", …)にしようとすると「no such file or directory」というエラーが出ます。

私は、この問題を管理し、この階層に従って、私のコマンドを実行することができるようにする方法を知っていると思います:

src 
include 
bin 
makefile 
executable <- this one is my main executable 
myLs 
    executableLS <- would like to be able to call this one through execvp 
myPs 
    executablePS <- would like to be able to call this one through execvp 
+2

'$ PATH'にあるディレクトリにプログラムを置くか、' $ PATH'にプログラムがあるディレクトリを置くか、適切なパス名(相対または絶対)を使って実行するプログラムを識別します。 –

答えて

2

プログラムはexecvp()で実行できるようにするために、あなたがしなければならない:

  • あなたのプログラムを既にあなたのディレクトリに置きます$PATH
  • または、プログラムが存在するディレクトリを$PATH
  • に置きます
  • プログラムへの絶対パス名()、
  • を使用するか、プログラムに正しい相対パス名(../useful/myLs、さらには./myLs)を使用するように手配してください。それは見ているコマンド名が全く/が含まれていないときexecvp()だけ$PATH上で検索することを

は注意(そう./myLsはそれが$PATH上で探して停止します)。相対名は通常、最も有用ではありません。ディレクトリを変更すると、相対パス名が変更される可能性があります。

疑問がある場合は、ディレクトリが$HOME/binであることを確認し、そこにプログラム(またはそこにプログラムへのシンボリックリンク)を入れ、パスに$HOME/binを追加してください。それは私のPATHの前で生きています。私は自分が何をしているのか知っていると思う。

+0

ええ、それは私が探していたものです!すべてありがとうございました! – LenweSeregon

関連する問題