画面でコードを実行できません

画面でコードを実行できません

美徳画面でいくつかのコマンドを実行する次のコードがあります。

screen -R << EOF
    cd /home/users/devops_tester/apps/Selenium-Webdriver
    export DISPLAY=:99
    npm start
EOF

エラーが発生します。

Must be connected to a terminal.

どうすれば解決できますか?

この関連トピックを見つけましたが、SSHを使用しません。

コマンドを使用してデスクトップからSSHを介してリモートサーバーからスクリーンセッションを開始するにはどうすればよいですか?

以下は画面アプリです。

https://packages.ubuntu.com/trusty/screen

ベストアンサー1

最初-アル字型これは、何かが実行されていた可能性がある既存の画面セッションを再開しようとしていることを意味します。この場合、シェルコマンドをプッシュして実行することを望むことはできません。復元されたスクリーンセッションに実行中のエディタがある場合はどうなりますか?だから使用しないでください。-アル字型実行するコマンドを指定する場合。

別の問題は、<< __EOF__呼び出されたプログラムを介して入力リダイレクトを使用するとランタイムが表示されないことです。端末つまり、対話型端末はありません。これはここで簡単に証明できます。

$ tty
/dev/pts/0

$ tty << __EOF__
__EOF__
not a tty

幸いなことに、screen起動時にカスタムコマンドを実行する機能がサポートされています。簡単ですscreen command args(参考に-アル字型背面画面から)。

/bin/shあなたの場合、screenは複数のシェルコマンドを実行しないので、すべてのコマンドを引数として渡す必要があります。次のように動作する必要があります。

$ screen /bin/sh -cx "cd /home/users/devops_tester/apps/Selenium-Webdriver; export DISPLAY=:99; npm start"

新しい画面セッションが作成され、コマンドが実行されます。これ- Xシェルが参照用に実行するコマンドを印刷するようにします。オプションなので削除できます。

すぐに分離されたスクリーンセッションで上記の内容を実行し、後で再接続することもできます。

$ screen -d -m /bin/sh -cx "cd /home/...; export ...; npm start"
# runs the commands in screen but returns immediately

たとえば、システム起動時にコマンドを実行したい場合に便利です。

もちろん、上記のセッションを再接続して、何が起こっているのかを確認できます。

$ screen -R    # re-attach to the above screen session

最後に重要なのは、すべてのコマンドを/bin/sh引数として渡すのではなく、小さな3行のシェルスクリプトを作成して実行可能にし、簡単な呼び出しで実行する方が簡単です。

$ screen /path/to/the-script

おすすめ記事