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

Chr*_*hmé 5 command-line bash

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

例如,我想要的是,而不必键入

gcc -m32 -g -zexecstack -fno-stack-protector -mpreferred-stack-boundary=2 -no-pie -fno-pic -o program program.c
Run Code Online (Sandbox Code Playgroud)

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

custom-gcc program
Run Code Online (Sandbox Code Playgroud)

或者至少

custom-gcc -o program program.c
Run Code Online (Sandbox Code Playgroud)

如果我可以将选项添加到也将添加到gcc.

我怎样才能做到这一点?谢谢

ste*_*ver 10

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

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

$ cat Makefile
CC := gcc

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

LDFLAGS := -no-pie
Run Code Online (Sandbox Code Playgroud)

然后您可以简单地运行make program以编译和链接您的代码与给定的选项 ex。给予

==> 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; }
Run Code Online (Sandbox Code Playgroud)

然后

$ make hello
gcc -m32 -g -zexecstack -fno-stack-protector -mpreferred-stack-boundary=2 -fno-pic  -no-pie  hello.c   -o hello
Run Code Online (Sandbox Code Playgroud)

$ make goodbye
gcc -m32 -g -zexecstack -fno-stack-protector -mpreferred-stack-boundary=2 -fno-pic  -no-pie  goodbye.c   -o goodbye
Run Code Online (Sandbox Code Playgroud)

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


Han*_*nnu 5

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

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

光盘
目录
echo >>.bash_aliases 'PATH=$PATH:$HOME/bin'
cat <<EOF >bin/custom-gcc
#!/bin/bash
gcc -m32 -g -zexecstack -fno-stack-protector \
    -mpreferred-stack-boundary=2 -no-pie -fno-pic \
    -o "$1" "$1.c"
EOF
chmod 755 bin/custom-gcc
出口

现在

  • 打开一个新的终端(外壳),
  • cd 进入一个文件夹,例如“program.c”并键入
  • custom-gcc program

...这应该从现在开始执行custom-gcc你想要的效果。

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

说明:
cd确保您在 $HOME/

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

来自catto的行EOF是创建文本文件的简单方法,这里的文本文件内容将是执行您请求的 bash 脚本(提示:阅读 Bash 指南以了解内容)。

chmod套“模式的标志”上刚刚创建的文件,这样它会被认为“可执行”。

最后一行退出 shell。

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