从任何位置运行编译的C程序

快速的问题。 编译一个程序后,我总是必须明确地告诉它从当前目录运行。 例如$ ./testprog -argument1

有没有办法设置某种别名,这将允许我简单地说$ testprog -argument1 ,本质上允许我从任何位置运行该程序?

PATH=$PATH:. …很容易照顾到你所关注的./部分……但是更多的关注并不是真正的肉。 除此之外,出于安全原因,我们中的许多人都为此而皱眉。 请参阅将当前目录添加到path以获取更多关于该方面的讨

如果我误解了 (我有),我将展开@DavidShwartz的说法。

其余的选项包括指定相关目录作为path的一部分( PATH=$PATH:/to/your/executable/dir ),或者如果您只有几个程序,或者分散在多个位置符号链接。 如果你正在使用符号链接路由,我build议将~/bin设置在path的末尾,并在~/bin创build符号链接…

 ln -s /to/your/executable/dir/program ~/bin/program 

在$ PATH语句的末尾添加额外的path总是最好的。 你想要覆盖系统文件是非常罕见的。 这将照顾到达到它。

对于最后一部分,您可以将一个shell脚本放在您的$ PATH目录之一中,其中包含您要传递的选项。 你可以真的作弊并完全跳过整个path: alias runmyprogram '/to/your/executable/dir/program -argument1' (如果你总是需要,你也可以在这里打开参数)

还有更多,但在你的path或别名命令的shell脚本应该这样做。

把你的可执行文件放到$ PATH文件夹中或者把包含这个可执行文件的目录加到$ PATH中

大多数平台为这种情况提供了一个特定于用户的bin目录。

您可以尝试使用echo "${PATH}"来查看echo "${PATH}"是否有这样的目录。 在path中寻找/home/fred/bin类的东西。 它通常非常接近开始,如果你愿意的话可以重写标准命令。 (小心!)

如果你看到,确保你的home目录有一个bin目录,并把可执行文件放在那里。

 alias testprog=./testprog 

如果你正在移动很多,你的程序总是在同一个目录下,你也可以使用绝对地址

 alias testprog=/home/user/projects/test/bin/testprog 

用'unalias testprog'去除别名。 你也可以将别名行粘贴到你的〜/ .bashrc中,这样你就不需要继续设置了。 例如我的.bashrc包含这行,所以我的串口程序将永远logging到一个文件,而不必记住使用什么选项:

 alias minicom="minicom -C /home/user/logs/minicom-$(date +%Y-%m-%dT%H)" 

你可以把程序放在你喜欢的地方,创build一个bash脚本来调用你的程序(意思是指向它的位置)并传递参数。 把它命名为mycommand,并把它放在/ usr / bin。 做chmod + x / usr / bin / mycommand,你现在有一个调用你的程序的命令。