スクリーンセッションでリモートコンピュータのスクリプトを実行するために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を設定できます。
リモートコマンドを変更できる場合は、いくつかの回避策があります。
- スクリプトの実行に必要な項目を別の bash ファイルに追加します。コマンドに直接インポートします。
- コマンドとリモートスクリプトでフルパスを使用します。 PATH以外にどのような環境依存関係があるかはわかりませんが、明らかにこれらの依存関係も解決する必要があります。
- リモートシステムに
~/.ssh/environment
必要なすべての環境変数、エイリアス、関数などを入力します。この設定が有効に/etc/ssh/shhd
なるようにSSH設定ファイルを変更してくださいPermitUserEnvironment
。それ以外の場合は動作しません。 - コマンドに環境変数設定を追加すると(
"export PATH=\$PATH:/home/you/bin;..."
エスケープなど)、PATH
追加したいリモートバージョンが確認され、コマンドが送信される前に拡張が防止されます。
上記の方法のいずれも効果がない場合は、制限事項をより詳しく説明してください。
答え3
認識されるファイルの種類を確認してください。
file myscript.sh
ユーザー+実行権限の設定
chmod u+x Myscript.sh