Как мне найти неровные права доступа к файлам в структуре каталогов?

Суть проблемы в том, что вы пытаетесь запустить программу, которая является консольным приложением, но к ней не подключен терминал. В терминале вы можете запустить свою программу, просто вызвав имя программы, но в графическом интерфейсе вам нужно явно указать, что должно быть открыто окно терминала для запуска консольных приложений (это особенно верно для рабочих столов на основе GNOME, таких как Ubuntu Unity) .

Что нужно сделать, так это создать файл .desktop для вашей программы с 4 полями. Вот пример:

[Desktop Entry]
Name=MyProg
Type=Application
Exec=/home/xieerqi/example_directory/hello_world_prog
Terminal=true

Я не знаю насчет CentOS, но что касается Ubuntu, то существует требование, согласно которому .desktop приложения должны быть также исполняемыми, если они расположены в каком-либо каталоге. в домашнем каталоге пользователя. Файлы .desktop, находящиеся в других каталогах, например /usr/share/applications, этого не требуют.

Итак, как только у вас будет файл .desktop и вы сделаете его исполняемым, вы сможете запустить программу. Важным битом является строка Terminal=true. Это то, что скажет GUI поднять терминал и запустить там вашу программу. ПРИМЕЧАНИЕ: если ваша программа выполняет что-то и сразу же завершает работу, вам потребуется какая-то задержка или вызов getchar(); только для того, чтобы окно оставалось открытым, потому что окно терминала закроется когда программа выходит. Вот почему многие пользователи иногда недоумевают: «Почему моя программа не запускается?» Он работает, на самом деле он просто выходит слишком быстро.


Дополнительные примечания:

  • избавиться от system("read -p 'Нажмите Enter, чтобы выйти...' var"); . Вызов read является встроенной оболочкой и не является отдельной программой, что означает, что его можно использовать, только если вы используете оболочку, такую ​​как bash . Если вы используете C, сделайте это правильно, используя scanf() или getchar(), чтобы добавить задержку в вашу программу. Он присутствует после строки return 0;, что означает, что ваша строка system() не будет достигнута (программа просто завершится на операторе return), поэтому ваше размещение паузы для программы также недействительно.
  • Прочтите этот пост на AskUbuntu, например, соответствующий файл .desktop со ссылками на официальную документацию.
  • Если вам лень и вы не хотите создавать файлы .desktop для каждого исполняемого файла, есть множество решений здесь. Я даже выложил туда сценарий.

1
25.10.2016, 04:40
0 ответов

Теги

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