我已经读过了如何创建自定义终端命令(运行脚本)? 。但这总是执行相同的命令。
我想要的是,例如,不必输入
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