Tag: bash

如何将命令嵌入到作为内置的bash中?

我使用C编程语言创建了一个命令行实用程序。 现在我想把这个命令嵌入bash中。 它应该充当bash内置命令’cd’。 我怎样才能做到这一点?? 在bash源代码中,我看到有一个名为builtins的目录。 我查看了该目录,发现有*.def文件,并且有一个名为cd.def的文件。 我认为这是bash内置cd的定义。 现在我的问题是如何创建自己的定义???

Powershell ToBase64String和Linux base64之间的输出不同

SGVsbG8sIHdvcmxkIQ ==我必须编写两个脚本,一个用于Windows Server,另一个用于Ubuntu Server。 为了说明,如果我的bash脚本运行: echo -n ‘BASE64’ | base64 结果是QkFTRTY0 。 如果我的PowerShell脚本运行: [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes(‘BASE64’)) 结果是QgBBAFMARQA2ADQA 。 重要的是在Linux中获得相同的PowerShell字符串。 谁知道为什么这个差异和我的问题的一些解决方案? 我认为这个问题与Unix的UTF-8编码有关,但我找不到解决方案。 我可以解码Linux中的PowerShell输出,但我无法在Linux中编码字符串并获得与PowerShell相同的结果。 bash解决方案是最佳的,但C / C ++代码解决方案或指南也适用。

编写基本Shell

对于我的课,我必须创建一个类似于bash的基本shell,允许用户调用ls,sleep等命令。我正在寻找有关如何执行此操作的资源:教程,帮助文本,示例代码甚至只是一些关于如何入门的一般信息。 有没有人有链接或信息来帮助我?

如何解释C中命令行参数中的特殊字符?

第一个问题: 假设我们编写一个简单的程序,它接受命令行参数并打印到文件中。 如果用户输入 writetofile你好!0 \ nw%orl \ t!@#y bash回复 !0:未找到事件。 如果用户不知道使用引号(”)或转义字符(’\’),我该如何处理这些东西而不是bash将其理解为命令? 第二个问题: 一旦我得到这些参数,我如何将它们解释为特殊字符而不是字符序列。 (即。\ t是标签,而不是’\”’) 也就是说,如何确保程序将其写入文件: Hello!0 w%orl !@#y 并不是 Hello!0\nw%orl\t!@#y

Linux终端中的游戏:更改图像:打印已打印的文本

好吧,我只是在linux终端中实现非常简单的纸牌游戏。 我想要实现的是改变图像的效果,基本上是对已经打印的文本进行打印(我想我不能做,除了用\ r \ n重印相同的行)。 我想要做的是获得终端高度,然后打印换行符直到终端的下边缘,然后将光标定位在终端,以便打印的最后一行将在顶部。 有没有很好的方法来做到这一点? 我刚刚找到了名为Ncurses的库。 似乎它可以做到这一点。 这是一个不错的选择吗?

在不编译和执行代码的情况下找到类型大小的最简单方法是什么?

我写了一个bash脚本来确定gcc的数据类型的大小(例如./sizeof int double输出int和double的相应大小),方法是将它的每个参数包装在下面的P()宏中,然后编译并运行代码。 #define P(x) printf(“sizeof(” #x “) = %u\n”, (unsigned int)sizeof(x)) 问题是这是相对慢的(需要一整秒!),特别是链接步骤(因为用-c或-S编译几乎没有时间,运行输出的二进制也是如此)。 一秒钟本身并不是那么慢,但如果我在其他脚本中使用这个脚本,它会加起来。 是否有更快,更简单的方法来找出gcc用于数据类型的大小?

在OSX中崩溃时自动重启程序

可能重复: 如果进程死了,如何编写bash脚本来重启? 我做了一个偶然崩溃的C程序,我无法解决它(getaddrinfo的一些问题,这是一个相当自发的看似)。 我想在崩溃时重启程序。 我觉得这很容易。 我打算用fork分离有问题的libcurl代码,并查看如何从关闭中检测进程,以便可以再次分叉。 但是,我选择了“轻松”选项,尝试重新启动整个程序并从文件中恢复数据。 我试过这个: #!/bin/sh while true; do cd “~/ProgramDir” exec “~/ProgramDir/Program” done 但是当程序退出失败时,如果有意义,它会开始输出下一次执行到终端输入。 所以如果我假装我的程序只是一个Hello World程序,那么它会做这样的事情: bash-3.2$ start.sh Hello World! Hello World! bus error bash-3.2$ Hello World! -bash: Hello: command not found bash-3.2$ Hello World! -bash: Hello: command not found 它不会像以前那样继续该计划。 终端认为程序已退出,但随后将下一次执行的输出作为终端输入。 这样做的正确方法是什么?

如何在代码中同时交换或替换多个字符串?

给出以下代码示例: uint8_t i, in, ni; i = in = 2; ni = 1; while (2 == i > ni) in++; 如何使用emacs,vi,* nix命令或其他任何内容分别用in, ni, and i或inni, inin, and nini替换i, in, and ni ?

将STDOUT和STDERR重定向到C中的套接字?

我正在尝试将STDOUT和STDERR重定向到套接字。 我做了: if(fork() == 0) { dup2(newsock, STDOUT_FILENO); dup2(newsock, STDERR_FILENO); execvp(); } 不知何故,它只显示了输出的第一个小部分。 例如,当我尝试执行ls或mkdir时,它显示在“mkdir”上。 有什么问题? 我尝试过它可以工作,但我只能重定向STDOUT或STDERR之一 close(1); dup(newsock); 非常感谢。

在Bash脚本中处理gcc警告和输出

所以我是整个Bash脚本场景的新手,但我正在编写一个脚本来编译目录中的所有.c文件,我已成功通过以下方式完成: for F in *.c; do gcc -c -Wall -o ${F%.c} $F done 一切正常,但我希望输出看起来像: ex1.c Errors ex2.c OK ex3.c Warnings 所以基本上我希望退出状态为0(一切正常)为“Ok”,状态1(警告,但没有错误)为“警告”和状态2(未编译)为“错误”。 我很难搞清楚如何做这样的事情。 我四处搜寻,找不到任何我发现有用的东西。 我很可能忽略了一些东西。 编辑:无论如何要说:如果gcc -Wall file.c有错误,那么只说错误而不是完整的GCCerror handling消息? 与警告和完美的编译相同?