在c中使用bash输入文件夹
我正试图用c语言编写一个简单的程序,输入我在主目录中创建的特定文件夹,清除终端屏幕并列出文件夹中的内容:在c中使用bash输入文件夹,c,linux,bash,C,Linux,Bash,我正试图用c语言编写一个简单的程序,输入我在主目录中创建的特定文件夹,清除终端屏幕并列出文件夹中的内容: #include <stdlib.h> void main() { system("cd"); system("cd Desktop"); system("clear"); system("ls"); } #包括 void main() { 系统(“cd”); 系统(“cd桌面”); 系统(“清除”); 系统(“ls”); } 当我编译并运行它时,它会列出我
#include <stdlib.h>
void main()
{
system("cd");
system("cd Desktop");
system("clear");
system("ls");
}
#包括
void main()
{
系统(“cd”);
系统(“cd桌面”);
系统(“清除”);
系统(“ls”);
}
当我编译并运行它时,它会列出我主目录中的所有内容,并且不会移动到我指定的文件夹中。我正在尝试制作一个脚本,我可以在我的终端上从任何地方运行,以进入我的工作专用文件夹(我很懒),所以我也想知道如何使它成为我的终端上的一个命令(就像你在任何目录下键入cd,它做你想做的事情)
很抱歉在这里提出两个问题,但它们有点关联。您不能这样使用:system()
将创建一个子进程,在其中执行指定的命令
因此,如果执行system(“cd”)
,创建的子进程将更改其当前目录,但父程序(您的代码)不会知道它
要制作您想要的内容,请使用。
系统
在单独的进程中运行,当进程结束时,任何环境更改(如当前目录的更改)都将被丢弃
由于要执行多个命令,可以将它们放在shell脚本中
或者,您可以在对系统的一次调用中运行一些执行ls
的操作:
system("clear");
system("/bin/sh ls $HOME/Desktop");
我使用sh
运行ls
来访问$HOME
的shell扩展
关于你的第二个问题:
要使程序作为命令运行,它需要位于路径中列出的目录中。您可以将程序放在路径中的现有目录中,也可以将程序所在的目录添加到路径中
如果您计划创建一组个人实用程序,我建议您创建一个目录$HOME/bin
,并将程序复制到那里。然后将以下内容添加到登录脚本中(应该类似于$HOME/.login或$HOME/.bashrc):
您只需将别名添加到~/.bashrc文件:
alias wcd='cd /dedicated/dir/path'
现在,从终端的任何地方,只需运行wcd
即可移动到您的目录
如果您也想运行ls
,则:
alias wcd='cd /dedicated/dir/path && ls'
注意:打开~/.bashrc文件并在末尾添加上一行,然后打开一个新终端或在现有终端窗口中运行source~/.bashrc
。每个系统
调用都在一个单独的子进程中运行,并且每个调用都是独立的。从一个system
调用对环境的任何更改都不会影响原始进程或任何其他后续system
调用。您最好编写一个实际的bash脚本,而不是像这样的C程序。@kaylum您知道我如何在C程序中执行bash脚本(为了简单起见,两者都在同一个目录中)?当我执行export命令时,他停止响应基本bash(如ls)我必须关闭终端并重新打开,一切都恢复正常。我试着在/usr/bin文件夹中制作bash脚本,但它说我没有权限,sudo也不工作。你能帮我一下吗?@someoneb100你通常不想把自己的东西放在/usr/bin
里。奇怪的是,export
语句对您不起作用。
alias wcd='cd /dedicated/dir/path && ls'