Как запустить программу C / C ++ с помощью контекстного меню (параметр правой кнопки мыши)

GPRename автоматически вставляет нуль, если вы переименовываете 10 или более файлов (два, если вы переименовываете 100 или более и т. д.) при использовании числовой функции. Просто убедитесь, что Zero auto-fill включен в меню Options.

1
задан 8 October 2017 в 17:17

6 ответов

1. Создайте файл сценария Nautilus и сделайте его исполняемым:

touch "$HOME/.local/share/nautilus/scripts/MyC++Run"
chmod +x "$HOME/.local/share/nautilus/scripts/MyC++Run"

1. Вот содержание скрипта. Он создает дополнительный (автоматически удаленный) скрипт, который выполняется в новом gnome-терминале, поэтому вы можете видеть сообщения об ошибках в окне терминала:

#!/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, который я нашел, когда я сделал один из моих ответов. В зависимости от входных параметров функции 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 намерена открыть новое окно gnome-terminal. Эта часть $(echo \'"${AUX}"\') предназначена для печати одиночных кавычек вокруг имени сценария aux. Это важно, когда имя скрипта содержит некоторые специальные символы. Я не мог найти другого способа сделать это. Другим способом qote только пространства является использование: ${AUX/\ /\\ }. Вот пример сценария, который создает файлы журналов, где вы можете видеть сообщения об ошибках из процесса.

3. Вот демонстрация (из предыдущей версии) возможностей скрипта:

предыдущая версия

3
ответ дан 22 May 2018 в 17:44
  • 1
    Nice - но вы, вероятно, захотите скомпилировать cpp с g ++, а не gcc, чтобы соответствующие стандартные библиотеки были связаны - вы могли бы рассмотреть возможность использования `make " $ {FILE_NAME} " который должен вызывать соответствующий компилятор / компоновщик агностически – steeldriver 8 October 2017 в 20:09
  • 2
    Привет Па, Woowww .. Спасибо .. Однако есть проблема. Если в программе есть ошибки, терминал не открывается. Из-за этого мы не можем понять, в чем причина не выполнения программы. Я прошу вас также обновить это. – Ravi Teja 9 October 2017 в 06:31
  • 3
    Привет Па, Спасибо за ответ. Конечно, я не ожидаю выхода 1 кода. Скорее мое ожидание - 2 вывода кода. Однако есть небольшой сбой в 2-х кодах. Шаг 1: напишите «Hello World». без ошибок. Шаг 2: Выполните его. Шаг 3: вы увидите Cpp1.out в папке. Шаг 4: обновите код Cpp1.cpp, удалив; для создания ошибки. Шаг 5: Запустите Cpp1.cpp. Шаг 6: Вы можете увидеть список ошибок с описанием в терминале. Вот проблема, 2 код также запускает Cpp1.out, который был сгенерирован на шаге 3. Этого не ожидается. Не могли бы вы обновить код. Благодаря! – Ravi Teja 9 October 2017 в 16:28
  • 4
    Hi Pa, Issue 2: Если имя файла имеет какое-либо пространство (пример: «rev array.cpp» в терминале, отображающий ошибку как «не найден»). Обновите также это. – Ravi Teja 9 October 2017 в 16:43
  • 5
    Проблема 3: Если файл отличается от папки рабочего стола, «не найден», ошибка отображается в терминале. Пожалуйста, обновите это. – Ravi Teja 9 October 2017 в 16:58
[D0] 1. Создайте файл сценария Nautilus и сделайте его исполняемым:

touch "$HOME/.local/share/nautilus/scripts/MyC++Run" chmod +x "$HOME/.local/share/nautilus/scripts/MyC++Run"

1. Вот содержание скрипта. Он создает дополнительный (автоматически удаленный) скрипт, который выполняется в новом gnome-терминале, поэтому вы можете видеть сообщения об ошибках в окне терминала:

#!/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, который я нашел, когда я сделал один из моих ответов. В зависимости от входных параметров функции 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 намерена открыть новое окно gnome-terminal. Эта часть $(echo \'"${AUX}"\') предназначена для печати одиночных кавычек вокруг имени сценария aux. Это важно, когда имя скрипта содержит некоторые специальные символы. Я не мог найти другого способа сделать это. Другим способом qote только пространства является использование: ${AUX/\ /\\ }. Вот пример сценария, который создает файлы журналов, где вы можете видеть сообщения об ошибках из процесса.

3. Вот демонстрация (из предыдущей версии) возможностей скрипта:

предыдущая версия

3
ответ дан 18 July 2018 в 05:36
[D0] 1. Создайте файл сценария Nautilus и сделайте его исполняемым:

touch "$HOME/.local/share/nautilus/scripts/MyC++Run" chmod +x "$HOME/.local/share/nautilus/scripts/MyC++Run"

1. Вот содержание скрипта. Он создает дополнительный (автоматически удаленный) скрипт, который выполняется в новом gnome-терминале, поэтому вы можете видеть сообщения об ошибках в окне терминала:

#!/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, который я нашел, когда я сделал один из моих ответов. В зависимости от входных параметров функции 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 намерена открыть новое окно gnome-terminal. Эта часть $(echo \'"${AUX}"\') предназначена для печати одиночных кавычек вокруг имени сценария aux. Это важно, когда имя скрипта содержит некоторые специальные символы. Я не мог найти другого способа сделать это. Другим способом qote только пространства является использование: ${AUX/\ /\\ }. Вот пример сценария, который создает файлы журналов, где вы можете видеть сообщения об ошибках из процесса.

3. Вот демонстрация (из предыдущей версии) возможностей скрипта:

предыдущая версия

3
ответ дан 24 July 2018 в 18:22

У вас есть основное недоразумение в программировании на C / C ++: это не скрипты, интерпретируемые во время выполнения. Вместо этого эти программы необходимо скомпилировать и преобразовать в исполняемые программы.

Предполагая, что имя вашего файла Cpp1.cpp, вам нужно будет выполнить следующий терминал:

[d2 ] gcc -o Cpp1 Cpp1.cpp

Результирующий вывод Cpp1 будет исполняемым двоичным файлом, который можно запустить с помощью команды ./Cpp1. Обратите внимание, что в этом случае эту программу нельзя запустить, щелкнув правой кнопкой мыши он: он не знает об открытии окон и использовании их.

1
ответ дан 22 May 2018 в 17:44
  • 1
    Привет, зеленый, Пожалуйста, см. Метод, о котором я думаю, i.stack.imgur.com/hB4L1.png Пожалуйста, смотрите. благодаря – Ravi Teja 8 October 2017 в 17:13
  • 2
    Если вы умны с помощью скриптов (я не), вы можете заставить сценарий взять имя файла в качестве аргумента, скомпилировать программу и затем выполнить ее. – Charles Green 9 October 2017 в 00:10

У вас есть основное недоразумение в программировании на C / C ++: это не скрипты, интерпретируемые во время выполнения. Вместо этого эти программы необходимо скомпилировать и преобразовать в исполняемые программы.

Предполагая, что имя вашего файла Cpp1.cpp, вам нужно будет выполнить следующий терминал:

gcc -o Cpp1 Cpp1.cpp

Результирующий вывод Cpp1 будет исполняемым двоичным файлом, который можно запустить с помощью команды ./Cpp1. Обратите внимание, что в этом случае эту программу нельзя запустить, щелкнув правой кнопкой мыши он: он не знает об открытии окон и использовании их.

1
ответ дан 18 July 2018 в 05:36

У вас есть основное недоразумение в программировании на C / C ++: это не скрипты, интерпретируемые во время выполнения. Вместо этого эти программы необходимо скомпилировать и преобразовать в исполняемые программы.

Предполагая, что имя вашего файла Cpp1.cpp, вам нужно будет выполнить следующий терминал:

gcc -o Cpp1 Cpp1.cpp

Результирующий вывод Cpp1 будет исполняемым двоичным файлом, который можно запустить с помощью команды ./Cpp1. Обратите внимание, что в этом случае эту программу нельзя запустить, щелкнув правой кнопкой мыши он: он не знает об открытии окон и использовании их.

1
ответ дан 24 July 2018 в 18:22
  • 1
    Привет, зеленый, Пожалуйста, см. Метод, о котором я думаю, i.stack.imgur.com/hB4L1.png Пожалуйста, смотрите. благодаря – Ravi Teja 8 October 2017 в 17:13
  • 2
    Если вы умны с помощью скриптов (я не), вы можете заставить сценарий взять имя файла в качестве аргумента, скомпилировать программу и затем выполнить ее. – Charles Green 9 October 2017 в 00:10

Другие вопросы по тегам:

Похожие вопросы: