画面から「Myscript.sh」を実行できません。そのファイルやディレクトリはありません。

画面から「Myscript.sh」を実行できません。そのファイルやディレクトリはありません。

スクリーンセッションでリモートコンピュータのスクリプトを実行するためにsshを使用しようとしています。私が使用するコマンドは次のとおりです。

ssh -t MYSERVER "cd tempdirXYZ; screen Myscript.sh"

これにより、数秒間画面ウィンドウが表示されることがわかります。

cannot exec 'Myscript.sh': No such file or directory

私はリモートコンピュータでbashを使用しており、〜/ binフォルダにスクリプトを配置しました。上記のコマンドを実行すると、bashファイルをインポートできないようです。 bashが実行されているかどうかはわかりません。

コマンドを変更せずにこれを行う方法はありますか?リモートコンピュータがUbuntuを実行しています。

答え1

私は/binではなく〜/binと言ったことに気づきました。

システムのPATH変数にディレクトリを追加するには、次のコマンドを実行する必要があります。

export PATH=\$PATH:/home/<username>/bin

これにより、上記のスクリプトを実行できます。そうでない場合は、実行可能としてマークされていない可能性があるため、以下を実行します。

chmod +x ~/bin/Myscript.sh

答え2

コマンドを変更できない場合、できることはあまりありません。~/.bashrcこのコマンドの実行中にファイルを処理する必要があります。

おそらく何が起こっているのか条件付き終了文通常、先頭の近くの.bashrcは、現在のシェルが非対話型(この場合は非対話型)であることを検出すると終了します。時々、スクリプトはデフォルトのプロンプト変数PS1が設定されていることを確認します。これは、対話型シェルと非対話型シェルを評価する一般的ですが、醜い方法です。この場合、PS1が設定されていない場合、残りの.bashrcは解析されません。

これが本当かどうか確認します。いくつかの簡単なデバッグ技術を使用して、.bashrcがソースであるか、早期に終了するか(例:echoステートメント)を確認します。この問題を解決するには、リモートシステムで.bashrcを変更する必要があります。これにより、scpやsftpなどの他の機能がクラッシュする可能性があります。または、リモートコマンドでPS1を設定できます。

リモートコマンドを変更できる場合は、いくつかの回避策があります。

  1. スクリプトの実行に必要な項目を別の bash ファイルに追加します。コマンドに直接インポートします。
  2. コマンドとリモートスクリプトでフルパスを使用します。 PATH以外にどのような環境依存関係があるかはわかりませんが、明らかにこれらの依存関係も解決する必要があります。
  3. リモートシステムに~/.ssh/environment必要なすべての環境変数、エイリアス、関数などを入力します。この設定が有効に/etc/ssh/shhdなるようにSSH設定ファイルを変更してくださいPermitUserEnvironment。それ以外の場合は動作しません。
  4. コマンドに環境変数設定を追加すると("export PATH=\$PATH:/home/you/bin;..."エスケープなど)、PATH追加したいリモートバージョンが確認され、コマンドが送信される前に拡張が防止されます。

上記の方法のいずれも効果がない場合は、制限事項をより詳しく説明してください。

答え3

認識されるファイルの種類を確認してください。

file myscript.sh

ユーザー+実行権限の設定

chmod u+x Myscript.sh

関連情報