我需要做什么才能通过在我的unix系统上输入名称来运行我的c ++程序

时间:2010-08-25 23:09:00

标签: c++ shell compiler-construction path

  

可能重复:
  Code won’t run. [not]

我已经编写并编译了一个程序,我想这样做,以便从shell我可以只输入programname使其运行而不是进入程序所在的目录并在程序名称前输入./。如果可以,请告诉我。

5 个答案:

答案 0 :(得分:16)

如果你和我一起去Alderaan,你必须学习PATH的方法。

答案 1 :(得分:5)

你应该add the directory编译程序所在的路径。

例如,如果您在/home/jimmy/cpp目录

键入(前导$是提示)

PATH=$PATH:`pwd`
$myprog

了解export变量和bashrc file以使此更改成为永久变更。 (假设bash为你的shell)

答案 2 :(得分:4)

详细讨论为什么将.(当前目录)放在PATH中是个不错的主意。

让我们说你被机器上的对手攻击了。 他创作了一个恶意程序,并把它放在一个目录中,希望你最终会偶然发现它。为了增加他的机会,他将其命名为常见的mv

如果您已将.添加到路径的开头,并且当您键入mv onefile twofile时恰好位于正确的目录中...那么本地mv({{1运行而不是./mv命令,我们都使用了!这是因为mv位于您的路径中,而.位于mv之前。突然之间,您的用户帐户或整台计算机可能会受到严重破坏。

(注意:mv可能是内置命令之一,并且对此免疫。不确定......但原理是可靠的)

所以,你学习了这一课,现在把/usr/bin/mv放在路径的尽头,这样就可以在本地目录之前搜索所有“官方”目录。

但攻击者现在对你了!而不是程序.,他在程序mv中创建,这是mc的常见错字。同样,您打算键入mv,但要对mv onefile twofile做一个简单的拼写错误。现在搜索了所有“官方”目录,找不到程序mc,最后在本地目录中找到它。恶意代码会运行,您又会丢失。

教训是你的mc应该只涵盖已知良好的软件,并且由于你当前的目录经常更改,你永远不知道那里有什么软件,除非你非常清楚,否则不应该运行它。它带有PATH前缀(例如> ./IMeanToRunThis

答案 3 :(得分:2)

就个人而言,我使用$HOME/bin作为我编写的实用程序的个人收集点,但这对所有用户都没有用。否则,/usr/local/bin通常是本地编写的程序的正确位置, 对所有用户都有用。无论如何,我已经确认后一个地方在我的路径上并且还添加了$HOME/bin

除非你真的安装程序,否则尽管有诱惑,将程序放到/bin/usr/bin可能不是一个好主意。这相当于将您的计划放在C:\WindowsC:\Windows\System32中。它实际上永远不是正确答案。

了解有关PATH环境变量的更多信息以及shell如何搜索要运行的程序,绝对值得推荐。另外,正如另一条评论所指出的那样,只是不要将.添加到你的PATH中,因为它会在某些时候回来困扰你。

编辑:顺便说一下,我在Windows boxen上做了类似的事情。我总是为名为C:\Program Files的{​​{1}}创建一个兄弟姐妹。在那里,我创建了一个名为C:\Programs的文件夹,并将其添加到系统路径中。我使用bin就像我在* nix框上使用C:\programs\bin一样,并且放置任何手动安装(即没有使用真正的 Windows安装程序)程序或从*移植的东西在其他文件夹(例如$HOME/binC:\Programs\mingwC:\programs\MSYS中无法容忍其路径中的空格的nix。

主要在命令提示符下使用的任何小实用程序通常最终都在C:\programs\cygwin,但对于我认真计划在多台PC上使用的任何内容,我通常使用InnoSetup创建一个真正的Windows安装程序并让它安装在C:\programs\bin

答案 4 :(得分:2)

http://ss64.com/bash/alias.html

e.g。

alias progname=/path/to/program/progname
相关问题