再生コマンドの問題エラー

再生コマンドの問題エラー

/bin私のディレクトリには、次の行を含むシェルスクリプトがありますplay applause.mp3。このファイルはapplause.mp3実行可能ファイルと同じディレクトリにあります。

ただし、playコマンドでエラーが発生しましたplay FAIL formats: can't open input file 'applause.mp3': No such file or directory

ディレクトリから直接ファイルを開くとうまく再生されます/bin。ファイルがディレクトリ以外の場所に.mp3ある必要があることは明らかです。/binBashはどこでファイルを探しますか?

答え1

PATHBashは、環境変数で指定されたディレクトリで実行するコマンドを探します。

しかし、あなたのシナリオでは、bashはすでにタスクを実行し、playコマンドを実行しました。applause.mp3パラメータとして渡されます。それはすべて、playコマンドがそれをどのように解釈するかによって異なります。

コマンドがファイル名引数を使用する一般的な場合は、現在のディレクトリから始まるパスを確認します(これがスクリプトを/bin呼び出す前にディレクトリをに変更したときに機能する理由です)。

/問題を回避するには、パラメータに絶対パス(次から始まる)を使用する必要があります。

答え2

プログラムは、実行可能ファイルと同じディレクトリにユーザーデータファイルを見つけません。場合によっては、同じディレクトリで構成ファイルまたは静的データファイルを見つけます(ただし、これはまれです)。ただし、ユーザーデータとインストールされたプログラムが同じディレクトリにあることはほとんどありません。プログラムは通常、ユーザーが書き込めないシステムディレクトリにあり、ユーザーのファイルは通常ホームディレクトリにあります。

ファイル名をプログラムに渡すと、次のように解釈されます。現在の作業ディレクトリ。すべてのプロセスには、プロセス環境の一部であり、特定のプログラムに関連付けられていない現在の作業ディレクトリがあります。通常はホームディレクトリから始まり、シェルコマンドを使用してcd別のディレクトリに変更できます。シェルから起動されたすべてのプログラムは、シェルの現在のディレクトリを継承します。

実行すると、現在のディレクトリから呼び出されたファイルをplay applause.mp3見つけます。applause.mp3実行可能ファイルがどのディレクトリにあるかは重要ではありませんplay

現在のディレクトリに関係なく有効なファイル名を使用するには、次のように渡します。絶対ファイル名(で始まる/)。シェルスクリプトまたはコマンドラインでは、先頭に~省略形を使用してホームディレクトリを表すことができます。たとえば、ホームディレクトリのサブディレクトリにあるファイルで実行しますplay ~/music/applause.mp3playapplause.mp3music

1可能ですが、ほとんどそうではありません。

関連情報