Я хочу изучить C/C++. Здесь мое требование не состоит в том, чтобы использовать IDE. Я хочу запустить свою программу C/C++ следующим способом,
После следования выше 4 шагов вывод или ошибки должны появиться в окне терминала.
Я пытался сделать сценарий Наутилуса использования, но он потерпел полный провал после нескольких пробных версий.
См. снимок экрана (который не работает способ, которым я ожидаю).
Я пытаюсь сделать как ниже, проверить здесь
1. Создайте файл сценария Наутилуса и сделайте его исполняемым файлом:
touch "$HOME/.local/share/nautilus/scripts/MyC++Run"
chmod +x "$HOME/.local/share/nautilus/scripts/MyC++Run"
2. Вот содержание сценария. Это создает вспомогательный глагол (автоматический удаленный) сценарий, который выполняется в новом терминале гнома, таким образом Вы видите сообщения об ошибках в окне терминала:
#!/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
Дополнительные объяснения: Используя вспомогательного сценария самый устойчивый способ выполнить больше чем одну команду в новом терминале гнома, который я нашел, в то время как я сделал один из своих ответов.
В зависимости от входных параметров функции 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
намеревается сохранить открытым новое окно терминала гнома.
Эта часть $(echo \'"${AUX}"\')
намеревается распечатать метки одинарной кавычки вокруг названия aux сценария. Важно, когда название сценария содержит некоторые специальные символы. Я не мог, нашел другой способ сделать это. Иначе к qote только пробелы использует: ${AUX/\ /\\ }
.
Вот сценарий в качестве примера, который создает файлы журнала, где Вы видите сообщения об ошибках от процесса.
3. Вот демонстрация (от предыдущей версии) функций сценария:
У Вас есть основное недоразумение о программировании C/C++: Это не сценарии, интерпретируемые во время выполнения. Вместо этого эти программы должны быть скомпилированы и преобразованы в выполнимые программы.
Брать имя Вашего файла Cpp1.cpp
, затем необходимо будет выполнить следующий терминал:
gcc -o Cpp1 Cpp1.cpp
получающийся вывод, Cpp1
будет исполняемым двоичным файлом, который может быть выполнен с помощью команды ./Cpp1
Обратите внимание на то, что в этом случае, эта программа не может быть запущена путем щелчка правой кнопкой по нему: это не имеет никакого знания о вводных окнах и использовании их.