Bash 如何使用我的C程序';作为过滤器后的二进制文件?

Bash 如何使用我的C程序';作为过滤器后的二进制文件?,bash,shell,Bash,Shell,我编写了一个程序,从文件或stdin读入输入,排序并将其写入输出文件或stdout。我希望能够像所有类似过滤器的程序(grep、tr、sed)一样使用二进制文件 例如:我希望能够键入类似“cat myfile.txt | myfilter--action sort>myoutputfile”的内容,而不是cat myfile.txt |/myfilter--action sort>myoutputfile 看起来您正在使用某种*nix系统。因此,您需要做的是将二进制文件放入PATH环境变量中存在

我编写了一个程序,从文件或stdin读入输入,排序并将其写入输出文件或stdout。我希望能够像所有类似过滤器的程序(grep、tr、sed)一样使用二进制文件


例如:我希望能够键入类似“cat myfile.txt | myfilter--action sort>myoutputfile”的内容,而不是cat myfile.txt |/myfilter--action sort>myoutputfile

看起来您正在使用某种*nix系统。因此,您需要做的是将二进制文件放入
PATH
环境变量中存在的目录中。在我的系统上,它如下所示:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
因此,要么将二进制文件放入其中一个,要么在
PATH

假设Linux系统(也可以在BSD或Mac上工作)编辑文件
~/.bashrc
,并添加行
export PATH=“:$PATH”
。请注意,编辑
.bashrc
此文件将仅对当前用户执行此操作

如果希望特定的可执行文件可供所有用户使用,则不要在主目录中创建bin目录,而是将其添加到/usr中。例如
mkdir/usr/mybin
和编辑
/etc/profile
而不是
~/.bashrc
。我的文件有以下几行:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH
添加行
PATH=“/usr/mybin:$PATH”
,这样您就可以得到:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
PATH="/usr/mybin:$PATH
export PATH
使用此方法,您将在所有用户路径中显示
/usr/mybin
。确保目录和可执行文件具有正确的权限。使用命令
chmod755/usr/mybin
chmod755/usr/mybin/filter
。另一种方法是将文件放在已在路径中的目录中,如
/usr/bin
。但是您仍然需要确保它有755个权限。

从它的声音来看,您在linux机器上,所以我将使用它作为我的答案

首先,您需要创建一个新文件夹:

$mkdir~/bin

之后,您需要将新文件夹添加到您的
路径中

$ nano ~/.bashrc
# Add the following to the end of your ~/.bashrc file while using nano
# or your text editor of choice:
export PATH="/home/$USER/bin:$PATH"
下一部分可能会有所不同,具体取决于您希望如何完成。因为它是您自己的个人二进制文件,所以将二进制文件添加到文件夹中可能更容易。否则,您可以创建指向该文件的符号链接

要创建符号链接,请执行以下操作:

将文件移动到bin文件夹中的步骤

最后,在选择了方法(并且可从
~/bin/
文件夹以某种方式访问可执行文件)后,运行以下命令:

请注意,
source
仅用于刷新当前终端会话,您不必再次执行此操作


$source~/.bashrc

Klutt是正确的。此外,您可以放置。(点)如果您不想在当前目录中的可执行文件前面键入./path字符串。危险在于您可能会无意中执行本地文件。请将其复制到/usr/bin@MikeWodarczyk你可以在路径上加点,但我想强调的是,这是不推荐的。请将你认为最好的答案标记为accepted。(我推荐Justice的答案)感谢Klutt、Justice和其他人。在完成这些步骤后,我尝试了“myfilter--input myfile.txt--output myoutputfile--action sort”,我得到了以下输出:“-bash:myfilter:command not found”。需要帮助修复这个.1)mkdir~/bin文件夹。2) 巴什尔。在末尾添加了以下行,“export PATH=“/home/$USER/bin:$PATH”'我是否必须修改$USER和$PATH以显示myfilter二进制文件的“root”和路径?3) 使用“ln-sf~/path/to/filter~/bin/filter”创建了一个符号链接。4) 使用“source~/.bashrc”刷新当前终端会话。值得一提的是,您不需要每次都运行
source
。它只是当前会话所需。命名文件夹
.bin
会使其隐藏;没有明显的理由这么做。@rici你是对的,我更喜欢隐藏我的可执行文件夹,因为没有必要看到每个人自己的文件夹,你当然有权这样做。另一方面,拥有~/bin(和一些其他TLA)可以让您使用
/configure--prefix=$HOME&&make&&make install
构建和安装软件的个人副本,我觉得这很方便。无论如何,我认为值得一提的是,这是一种选择,并且没有标准甚至最佳实践文档(afaik)建议使用隐藏文件。@rici我确实在答案中添加了注释。有没有最好的做法来保持它不被隐藏?如果是这样的话,我会用正确的格式修改我的答案。非常感谢你把它弄清楚,克洛特。我设置好了,它工作得很好!
$ ln -sf ~/path/to/filter ~/bin/filter
$ mv ~/path/to/filter ~/bin