
プログラムを実行し、出力をテキストフィールドに返すバイナリ実行プログラムコマンドを開発しています。
コマンドのパラメータには、コマンド自体(コマンドラインに入力)とディレクトリが含まれます。したがって、操作を実行するルーチンは最初にディレクトリに切り替えてからコマンドを実行します。
some.cmd
たとえば、ディレクトリからコマンドを実行したい場合、/home/user
パラメータはとcommand = 'some.cmd'
ですdirectory = '/home/user'
。
私はこれがsome.cmd
うまくいきませんでしたが、コマンドをこれに変更するとうまく/home/user/some.cmd
いきました。ただし、コマンドはls -l
機能します。また、cd
コマンドが認識されないことがわかりました。ssh
setupコマンドでリモートで実行するとssh user@localhost 'cd /home/user && ./some.cmd'
機能します。
シェルでコマンドを実行したときに存在するいくつかの設定が直接実行されるときは存在しないようですが、実行すると動作ssh
できる設定が生成されるようです。
これについての説明はありますか?
修正する:
いくつかの質問の最後に、コマンドを実行するために使用されるAPIが、シェルまたはコンソールによって提供される一般的な環境では実行されないことがわかりました。オプションを指定してコマンドを実行した後、/bin/sh -c "cd ..."
問題はもう存在しませんでした。これが私に与えられた環境ですssh user@localhost 'command ...'
。技術的な詳細はよくわかりませんが、通常のシェルで実行するときに使用できる環境が、オペレーティングシステムで直接実行されるコマンドに常に使用できるわけではありません。
答え1
ファイルを実行しようとすると、システムはファイルを見つける方法を知る必要があります。そのため、フルパスを指定すると機能します。シェルには、PATH
実行可能ファイルを見つけるためにディレクトリのリストを保存する環境変数もあります。そのため、フルパスを指定する必要はありませんls
。
答え2
PATH
これは、コマンドが.Windowsシステムとは異なり、実行可能ファイルの検索パスに暗黙的に存在しないためです。ls
たとえば、同じコマンドを実行するには、そのコマンドがにある必要がありますls -l
。ただし、これはシステムにないため、コマンドで透過的に実行することはできません。 3つのオプションが浮かんでいます。PATH
type ls
/bin
/usr/bin
some.cmd
PATH
たとえば、一部のディストリビューションではデフォルトでに
some.cmd
追加できます。PATH
/usr/local/bin/
"$HOME"/bin
PATH
"$HOME"
あなたのに加えることができますPATH
./some.cmd
通常のパスを使用する代わりに(現在のディレクトリへの相対パス)を実行できます。some.cmd
答え3
こんにちは
最初の方法:
Libeshell C++ Library
以下を使用して、シェルに似たコンソールアプリケーションを作成できます。
このライブラリを使用すると、コマンドラインとシェルスタイルのアプリケーションを作成できます。
2番目の方法:
C++ でコマンドを実行するには、次のコードを使用します。
#include <stdlib.h>
int main(){
system("gnome-terminal -x sh -c 'mkdir /root/Desktop/New-Dir-1 ; mkdir /root/New-Dir-2'");
}