Bash 从另一个目录运行C程序(别名或函数?)
我有一个程序可以在任何目录下执行 例如: 我已经编译好的c程序在目录“/Desktop/Folder1/”中,它的名字叫“program”。 我现在所在的目录(在终端中)是“/Desktop/Folder2/other/”。该文件夹中有一个“file.txt”。 我想做的是像 “myProgram zip file.txt”,这将压缩该文件 我四处搜索,发现了别名和bash函数。。。据我所知,我无法将参数传递给别名,因此我尝试使用bash函数:Bash 从另一个目录运行C程序(别名或函数?),bash,alias,Bash,Alias,我有一个程序可以在任何目录下执行 例如: 我已经编译好的c程序在目录“/Desktop/Folder1/”中,它的名字叫“program”。 我现在所在的目录(在终端中)是“/Desktop/Folder2/other/”。该文件夹中有一个“file.txt”。 我想做的是像 “myProgram zip file.txt”,这将压缩该文件 我四处搜索,发现了别名和bash函数。。。据我所知,我无法将参数传递给别名,因此我尝试使用bash函数: myProgram() { /Desktop/Fo
myProgram() { /Desktop/Folder1/program "$1" "$2" ; }
然而,只有当我的当前目录是我的c程序的目录时,这才有效
我是不是搞错了,函数不能这样工作?
有没有其他方法可以满足我的要求
如果我不清楚,请告诉我,因为英语不是我的母语。
多谢各位
我有一个程序可以在任何目录下执行
方法1
编辑bash配置文件通常~/.bashrc
,添加:
export PATH=$PATH:/path/to/your/command
但是,这有一个缺点,即路径中的其他二进制文件也很容易访问,这可能是不可取的
方法2
cp -n your_command_name /usr/local/bin/
#-n option is not to overwrite an existing file
备注:你完全搞错了。相反,花一分钟时间学习其他程序是如何做到这一点的。了解
$PATH
环境变量
所有现代操作系统(是的,包括Windows)都有PATH
环境变量的概念。此变量包含安装可执行文件(二进制文件和脚本)的所有目录的列表
传统的解决方案
传统上,unix系统由许多用户共享。现在,在sysadmin、db admin和开发人员都有自己的登录名的服务器上,有时仍然会看到这种情况(他们不是都以root用户身份登录的,对吧??)。因此,通常如果您编写自己的脚本或程序,您通常没有权限在通常的位置安装软件,如/bin
或/usr/bin
或/usr/local/bin
幸运的是,每个用户都可以修改自己的PATH
变量,以便将自己的bin
文件夹添加到PATH
变量中
传统上,解决方案是在主目录中创建一个bin
文件夹(您可以随意命名,有些人喜欢programs
,但传统上它是bin
,因为所有标准文件夹都是bin
):
然后将文件夹添加到路径
变量:
export PATH="$PATH:~/bin"
有时~
扩展不起作用,因此有时您可能需要使用主目录的完整路径:
export PATH="$PATH:/home/ohiohi/bin"
要对$PATH
进行永久性修改,请将其添加到.profile
或.bashrc
现在,您可以将编写的程序复制到~/bin
,使其在任何地方都可用:
cp /Desktop/Folder1/program ~/bin
现在,您只需键入:
program
传统解决方案的优势
传统上,您拥有的所有内容都应该保存在主目录中。这包括个人脚本、可执行文件等。这样做的好处是,如果您升级到新的PC或新的基于unix的操作系统,您只需将主目录复制过来,就可以继续使用您习惯的操作
我个人在1997年的学生时代就开始发展这个当前的主目录。它从Linux PPC开始,然后移动到Red Hat Linux,然后移动到Windows95、Windows98、Windows2000、WindowsNT上的Cygwin,然后再次移动到Red Hat Linux,然后移动到Centos、Ubuntu、Linux Mint,它目前驻留在Mac上
显然,如果您移动到不兼容的平台,二进制可执行文件将无法工作。这解释了为什么许多unix用户倾向于使用脚本语言。但是您可以随时重新编译。
函数myProgram(){…}
应该可以工作。您是否省略了函数
部分?据我所知,函数myProgram(){..}或仅myProgram(){..}是相同的。这两种方法都不起作用。问题很可能出在C程序中。bash
函数在我看来还可以。这可能是因为您正在向程序传递一个相对路径。尝试将第二个参数更改为绝对路径(请参见)。另外,您不需要将参数传递给别名,只需将myProgram
别名为/Desktop/Folder1/program
。由于我没有使用bash函数的经验,因此我立即认为这是我的问题。正如@RSahu指出的,这确实是我的C程序的一个问题。感谢您确认我的bash函数是正确的!隐马尔可夫模型。。。写入系统垃圾箱更可取?嗯。。。我指的是整个标准垃圾箱目录。它们通常处于数据包管理的控制之下。对于本地安装的文件,还有更好的位置…@sjsam——这是一种糟糕的做法——sbin代表系统bin(s代表系统),通常是那些不适合普通用户的程序“sbin:用于系统管理的实用程序(以及其他仅限根用户的命令)存储在/sbin、/usr/sbin和/usr/local/sbin中。/sbin包含启动、还原、恢复和/或修复系统所必需的二进制文件,以及/bin中的二进制文件“@Olaf:Sorry I missedlocal
;)我用a来进行双重检查。
program