Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从另一个目录运行C程序(别名或函数?)_Bash_Alias - Fatal编程技术网

Bash 从另一个目录运行C程序(别名或函数?)

Bash 从另一个目录运行C程序(别名或函数?),bash,alias,Bash,Alias,我有一个程序可以在任何目录下执行 例如: 我已经编译好的c程序在目录“/Desktop/Folder1/”中,它的名字叫“program”。 我现在所在的目录(在终端中)是“/Desktop/Folder2/other/”。该文件夹中有一个“file.txt”。 我想做的是像 “myProgram zip file.txt”,这将压缩该文件 我四处搜索,发现了别名和bash函数。。。据我所知,我无法将参数传递给别名,因此我尝试使用bash函数: myProgram() { /Desktop/Fo

我有一个程序可以在任何目录下执行

例如: 我已经编译好的c程序在目录“/Desktop/Folder1/”中,它的名字叫“program”。 我现在所在的目录(在终端中)是“/Desktop/Folder2/other/”。该文件夹中有一个“file.txt”。 我想做的是像 “myProgram zip file.txt”,这将压缩该文件

我四处搜索,发现了别名和bash函数。。。据我所知,我无法将参数传递给别名,因此我尝试使用bash函数:

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 missed
    local
    ;)我用a来进行双重检查。
    program