他のスクリプトのバックグラウンドでスクリプトを実行しようとすると、「該当するファイルやディレクトリはありません」

他のスクリプトのバックグラウンドでスクリプトを実行しようとすると、「該当するファイルやディレクトリはありません」

バックグラウンドで別のスクリプトを実行しようとすると、run.shスクリプトでエラーが発生します。

コンソールエラー文字列

./run.sh 30: nohup bash /export/home/myself/bin/mytestprogram &>/dev/null & : No such file or directory
  • ホストがインターネットにないため、スクリプトを公開できません。


これは有効です

ターゲットプログラムの絶対パスを構築します。

たとえば、 ターゲットスクリプトの絶対パス

/export/home/myself/bin/mytestprogram

手動またはスクリプトでうまく動作します。次のようにスクリプト変数を使用してこのコマンドラインを作成します。

Bashスクリプトがコマンド文字列を作成する方法

cmd="${exedir}/${exe}"

私は次のスクリプトでこれを実行します。

ターゲットコマンド文字列を呼び出すBashスクリプト行

"${cmd}"

すべて有効です... したがって、フォアグラウンドでスクリプトを実行すると機能します。


これで、バックグラウンドでまったく同じパスとコマンドを実行しようとすると、何も機能しません。

私は実行しようとしています:

バックグラウンドでコマンド文字列を実行する

nohup bash /export/home/myself/bin/mytestprogram &>/dev/null &

スクリプト出力からコマンドラインに手動でパイプすると機能します。コマンドラインから手動で呼び出すと機能します。私のスクリプトは実際にコンソールのコマンドを反映し、切り取り、貼り付けて動作しました。しかし、run.shスクリプトが同じコマンドを呼び出すと機能しませんか?

以下のように、上記の前景呼び出しと同じ変数を使用して構築しました。

バックグラウンドコマンド文字列の設定方法

cmd="nohup bash ${exedir}/${exe} &>/dev/null &"

このコマンドを次のようにコンソールに表示します。

コンソールにバックグラウンドコマンド文字列を送信する方法

echo -e "$cmd"

そしてそう呼んでください..

"$cmd"

また、私のエラーメッセージは次のとおりです。

コンソールエラー文字列

./run.sh 30: nohup bash /export/home/myself/bin/mytestprogram &>/dev/null &
:No such file or directory

どんなアイデアがありますか?

答え1

  1. あなたが探しているコマンドはnohup... notですnohub

  2. あなたはこれを行うことはできません:

    cmd="nohub bash ${exedir}/${exe} &>/dev/null &"
    "${cmd}"
    

    それがやっていることは、次のコマンドを実行しようとしていることです。一言 nohub bash /export/home/myself/bin/mytestprogram &>/dev/null &-単語の一部としてスペースと句読点が含まれます。。シェルはコマンドを評価せずにスペースに分割します。

ここには、次のようないくつかの答えがあります。変数に保存されたコマンドをどのように実行できますか?では、コマンドを安全に作成して実行する方法について説明します。個人的には、命令を変数に入れてその値を実行しようとするよりは、単に使用したいときに命令を実行してみる方が良いと思います。

関連情報