'および&なしでバリアントを試み、パス全体を綴り、$ PATHに追加しました。ハイパーピングを呼び出すスクリプトと同じディレクトリにあっても、スクリプトがハイパーピングを見つけることができないようです。ユーザーpiとして実行します。私の髪を抜いてください! !スクリプトの実際の行
if [ $(/usr/bin/pgrep -c hyperping) -eq 0 ]; then './hyperping &'; fi
PATHの「ハイパーピング」[$PATHで確認、削除&でも確認]
***pi@pi20:~/tests $ ls -lt hyperping
-rwxr-xr-x 1 pi pi 692 Jul 30 13:10 hyperping***
「hyperping」は独立してうまく機能します。
「set -xv」を使用したbash出力
***/++ /usr/bin/pgrep -c hyperping
+ '[' 0 -eq 0 ']'
+ '/home/pi/tests/hyperping &'
./at7PM: line 33: /home/pi/tests/hyperping &: *No such file or
directory*/****
答え1
を実行しておらず、文字通り空白と呼ばれるコマンドをhyperping
実行しようとしています。これは、コマンドが不必要に引用符で囲まれているために発生します。hyperping &
&
./hyperping &
'./hyperping &'
私はあなたが次のことをする予定だと仮定します
if ! pgrep hyperping >/dev/null; then
hyperping &
fi
静かにできるオプションがpgrep
ある場合は放棄できます。-q
>/dev/null
if ! pgrep -q hyperping; then
hyperping &
fi
このコマンドは、探しているものが正常に見つかった場合は終了状態0で終了し、そうでなければゼロ以外の終了状態で終了するpgrep
かのように動作します。grep
実際の解析を避けるために、上記のアプローチを使用することができます。出力手がかりを命令して、何かが見つかったかどうかについて手がかりを取得します。 「runというコマンドがif ! pgrep somecommand; then ...; fi
なければ...」と読み取ることができます。somecommand
答え2
SELECTが壊れていません!
'および&なしでバリアントを試み、パス全体を綴り、$ PATHに追加しました。
Kusalamandaは、スペースやアンパサンドを含むコマンドの周りにランダムな引用符を追加するエラーを指摘しました。これをしないでください。すべてをテストするにはクレイジーなアイデアが多すぎます。
Bashと同様のシェルの引用符は、他のほとんどのプログラミング言語とは異なります。主な目的は、スペースやその他のスペース文字を保存することです。残念ながら、多くの開発者は無意識のうちに他の言語から構文規則を取得し、すべての文字列に引用符が必要なように振る舞います。
ハイパーピングを呼び出すスクリプトと同じディレクトリにあっても、スクリプトがハイパーピングを見つけることができないようです。
これはまったく関係ありません。たぶん、最初のエラーを妨げる2番目のエラーかもしれません。
実行可能ファイルがパスにあるため、見つかった場合はパスを指定せずに呼び出す必要があります。
または、パスにない場合は、相対パス(例:./some/where/script.sh)または絶対パスを指定する必要があります。相対パスは、呼び出された呼び出し元(シェル内のユーザー)に基づいて見なされ、間接的に呼び出される他のスクリプト/プログラムとは相対的ではありません。
スクリプトがパスにある場合は、このような相対パスで呼び出さないでください./hyperping
。しかし、hyperping
相対パスで呼び出すと、パスを使用して検索するのではなく、場所によって異なります。一般的に悪い考えです。