如何使用变量参数创建自定义终端命令?

如何使用变量参数创建自定义终端命令?

我已经读过了如何创建自定义终端命令(运行脚本)? 。但这总是执行相同的命令。

我想要的是,例如,不必输入

gcc -m32 -g -zexecstack -fno-stack-protector -mpreferred-stack-boundary=2 -no-pie -fno-pic -o program program.c

我只需要输入一个自定义命令,例如

custom-gcc program

或者至少

custom-gcc -o program program.c

如果我可以向自定义命令添加选项,并且这些选项也会添加到 中,那就太好了gcc

我该怎么做?谢谢

答案1

对于这个特定的任务,我会使用make

在源目录中创建一个Makefile,内容如下:

$ cat Makefile
CC := gcc

CFLAGS := \
        -m32 -g \
        -zexecstack -fno-stack-protector -mpreferred-stack-boundary=2 \
        -fno-pic

LDFLAGS := -no-pie

然后,您只需运行即可make program使用给定的选项编译和链接您的代码,例如给定

==> hello.c <==
#include <stdio.h>

int main(void) { printf("Hello, world!\n") ; return 0; }

==> goodbye.c <==
#include <stdio.h>

int main(void) { printf("Goodbye, world!\n") ; return 0; }

然后

$ make hello
gcc -m32 -g -zexecstack -fno-stack-protector -mpreferred-stack-boundary=2 -fno-pic  -no-pie  hello.c   -o hello

$ make goodbye
gcc -m32 -g -zexecstack -fno-stack-protector -mpreferred-stack-boundary=2 -fno-pic  -no-pie  goodbye.c   -o goodbye

如需参考,请参阅GNU make:隐式规则使用的变量

答案2

一般答案:
打开你的网络浏览器www.tldp.org并寻找“Bash 指南”

简单回答:
打开终端(Shell)并输入 (在此过程中您将看到此处未显示的文本)

光盘
mkdir bin
回显 >>.bash_aliases'PATH=$PATH:$HOME/bin'
cat <<EOF >bin/custom-gcc
/bin/bash #!/bin/bash
gcc -m32 -g -zexecstack -fno-堆栈保护器 \
    -mpreferred-堆栈边界=2 -no-pie -fno-pic \
    -o“$1”“$1.c”
末梢血
chmod 755 bin/自定义-gcc
出口

现在

  • 打开一个新的终端(shell),
  • cd 进入有“program.c”的文件夹并输入
  • custom-gcc program

... 从现在起,这应该可以实现custom-gcc您所希望的效果。

注意:上述链接后面的 bash 指南将提供改进上述说明创建的简单脚本所需的所有信息。

解释:
cd确保你位于 $HOME/

接下来的两行在bin/您的主目录中创建一个子文件夹,并使其成为查找“命令”的地方。

cat从到这些行EOF是创建文本文件的简单方法,此处的文本文件内容将是一个执行您请求的操作的 bash 脚本(提示:阅读 Bash 指南以了解内容)。

在刚刚创建的文件上设置chmod“模式标志”,以便将其视为“可执行”。

最后一行退出 shell。

从现在开始,当您打开一个新的 shell(终端)时,$PATH 变量将包含您的个人“$HOME/bin/”文件夹,从而导致那里的任何文件都被视为可能的命令 - 当您在 shell 提示符下键入其中一个文件的名称时。

答案3

快速而肮脏

只需创建一个别名,给它一个很酷的名字。

echo "alias gargamel='gcc -m32 -g -zexecstack -fno-stack-protector -mpreferred-stack-boundary=2 -no-pie -fno-pic -o'" >> /home/yourusername/.bashrc

source /home/yourusername/.bashrc

执行它:

gargamel program program.c

这只对你为其创建别名的用户有效。因此,如果你想以其他用户(包括 root)的身份运行它,你必须为其创建别名。

答案4

一般来说,要创建带有变量参数的自定义终端命令,您可以在脚本中使用“$1”、“$2”等变量。这些变量返回命令行上的第一个和第二个参数。“$0”返回命令本身。

例如以下脚本foo

#/bin/bash 回显“$0” 回显“$1” 回显“$2”

如果你使用命令行调用它,将会返回

foo one two three
foo
one
two
three

相关内容