シェルなしでコマンドを実行できますか?

シェルなしでコマンドを実行できますか?

プログラムを実行し、出力をテキストフィールドに返すバイナリ実行プログラムコマンドを開発しています。

コマンドのパラメータには、コマンド自体(コマンドラインに入力)とディレクトリが含まれます。したがって、操作を実行するルーチンは最初にディレクトリに切り替えてからコマンドを実行します。

some.cmdたとえば、ディレクトリからコマンドを実行したい場合、/home/userパラメータはとcommand = 'some.cmd'ですdirectory = '/home/user'

私はこれがsome.cmdうまくいきませんでしたが、コマンドをこれに変更するとうまく/home/user/some.cmdいきました。ただし、コマンドはls -l機能します。また、cdコマンドが認識されないことがわかりました。sshsetupコマンドでリモートで実行すると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つのオプションが浮かんでいます。PATHtype ls/bin/usr/binsome.cmdPATH

  1. たとえば、一部のディストリビューションではデフォルトでにsome.cmd追加できます。PATH/usr/local/bin/"$HOME"/binPATH

  2. "$HOME"あなたのに加えることができますPATH

  3. ./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'");
}

関連情報