C/C++を学びたいです。ここで、私の要件はIDEを使用しないことです。次の方法でC/C++プログラムを実行したいのですが、
上記の4つの手順に従うと、ターミナルウィンドウに出力またはエラーが表示されます。
Nautilusスクリプトを使用して実行しようとしましたが、複数回試行した後、惨めに失敗しました。
スクリーンショットを参照してください(期待どおりに機能していません)。
私は以下のようにしようとしています、 ここをチェックしてください
1。Nautilusスクリプトのファイルを作成し、実行可能にします。
_touch "$HOME/.local/share/nautilus/scripts/MyC++Run"
chmod +x "$HOME/.local/share/nautilus/scripts/MyC++Run"
_
2。スクリプトの内容は次のとおりです。新しいgnome-terminalで実行される補助(自動削除)スクリプトを作成するため、ターミナルウィンドウ内にエラーメッセージを表示できます。
_#!/bin/bash -e
# Get the list of the selected in Nautilus items as an array $ITEM_LIST
IFS_BAK=$IFS
IFS=$'\t\n'
ITEM_LIST=($NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
IFS=$IFS_BAK
# Create aux script, that compile and execute the program. Run the script in gnome-terminal
compile_and_exec_program() {
OUT="${DIR}/${NAME}.out" # Define the name of the output file
AUX="${DIR}/${NAME}.bash" # Define the name of the aux script
printf '#!/bin/bash -e\n' > "${AUX}" # Create the auxiliary script
printf '%s "%s" "%s" && "%s"\n' "${1}" "${OUT}" "${item}" "${OUT}" >> "${AUX}"
printf 'rm -f "%s"\nexec bash' "${AUX}" >> "${AUX}"
chmod +x "${AUX}" # Make the aux script exec and run it
Nohup gnome-terminal -x sh -c "$(echo \'"${AUX}"\')" >/dev/null 2>&1 &
}
# For each selected item: get its name, location, etc. and proceed...
for item in "${ITEM_LIST[@]}"; do
ITEM="$(basename "${item}")" # Get the item name (exclude the path)
DIR="$(dirname "${item}")" # Get the path to the item (exclude the name)
NAME="${ITEM%.*}" # Get the name (exclude the extension)
EXT="${ITEM##*.}" # Get the extension (exclude the name)
# If the item is a file and its extension is `c` or `cpp`, then compile and execute
if [ -f "$item" ]; then
if [ "$EXT" == "c" ]; then compile_and_exec_program "gcc -o"
Elif [ "$EXT" == "cpp" ]; then compile_and_exec_program "g++ -o"
else notify-send "Wrong extension of the selected file: $ITEM"
fi
else
notify-send "The selected item is a directory: $ITEM"
fi
done
_
追加説明:補助スクリプトの使用は、新しいgnome-terminal内で複数のコマンドを実行する最も堅牢な方法です。 私の答えの1つ 。
関数_compile_and_exec_program
_の入力パラメーターに応じて、printf
セクションによって生成されるコンテンツの内容は、補助スクリプトは次のようになります。
_#!/bin/bash -e
g++ -o /work/dir/project.cpp /work/dir/output.out && /work/dir/project.out
rm -f /work/dir/project.bash
exec bash
_
ここで、_&&
_は、(通常のように)左側にあるコマンドが正常に実行された場合、右側にあるコマンドを実行することを意味します。行_rm -f /work/dir/project.bash
_は、補助スクリプト自体を削除します。最後の行_exec bash
_は、 keep open を新しいgnome-terminalウィンドウにしようとしています。
この部分$(echo \'"${AUX}"\')
は、auxスクリプトの名前を一重引用符で囲むことを意図しています。スクリプト名に特殊文字が含まれている場合は重要です。他の方法を見つけることができませんでした。スペースのみを引用する別の方法は、_${AUX/\ /\\ }
_を使用することです。
こちらです ログファイルを作成するサンプルスクリプト。プロセスからのエラーメッセージを確認できます。
3。次に、スクリプトの機能のデモ( 以前のバージョン から)を示します。
C/C++プログラミングについての基本的な誤解があります。これらはスクリプトではなく、実行時に解釈されます。代わりに、これらのプログラムをコンパイルして実行可能なプログラムに変換する必要があります。
ファイルの名前がCpp1.cpp
であると仮定すると、次のターミナルを実行する必要があります。
gcc -o Cpp1 Cpp1.cpp
結果の出力Cpp1
は、コマンド./Cpp1
を使用して実行できる実行可能バイナリファイルになります。この場合、このプログラムは右クリックしても実行できません。ウィンドウを開いて使用する方法に関する知識。