私のスクリプトにはという関数がありますmessages
。 Linux Mintで書いて問題なく実行しましたが、Debianバスターステーションに移動したときの機能は/usr/bin/messages
。
以下を呼び出す起動スクリプトがありますmessages
。
起動スクリプト
# call to messages script
. messages
情報
messages() {
# reformat the arguments and return them
}
後でスクリプトを開始
messages "This is a message"
投げるもの
./startup_script: line 35: .: /usr/bin/messages: cannot execute binary file
messages: could not open mailbox `/path/to/my/script/<string passed to my function>': No such file or directory
/usr/bin/messages
だから私の代わりに呼び出される関数に関連するエラーがたくさんあります。
を追加した後、関連するtype messages "This is a message"
出力は次のようになります。
messages is /usr/bin/messages
関数の名前を変更することもできますが、この状況を処理するより良い方法があるかもしれません。
システムバイナリを無視し、独自の機能を使用するようにスクリプトにどのように指示しますか?
¹この関数は複数のスクリプトで複数回呼び出されるため、名前を変更するだけでは最も簡単なオプションではありません。
ベストアンサー1
仕組み. file
:
<スラッシュ>が含まれていない場合、
file
シェルは指定された検索パスを使用してPATH
ファイルを含むディレクトリを見つけます。
この行動はPOSIXで指定。
あなたの最初の間違いは
./startup_script: line 35: .: /usr/bin/messages: cannot execute binary file
電話をかけるときの状況は似ています. echo
。
-bash: .: /bin/echo: cannot execute binary file
バイナリファイルのソースを取得しようとしています/usr/bin/messages
。実際、関数を定義するファイルにはソースがまったくなく、現在のスクリプトには関数が定義されていません。これは、後でmessages
まだ/usr/bin/messages
機能ではないことを意味します。
関連行は、または. ./messages
(. /full/path/to/messages
パスなど)でなければなりません。あなたのバイナリファイルではないファイル)。