Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中使用bash输入文件夹_C_Linux_Bash - Fatal编程技术网

在c中使用bash输入文件夹

在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”); } 当我编译并运行它时,它会列出我

我正试图用c语言编写一个简单的程序,输入我在主目录中创建的特定文件夹,清除终端屏幕并列出文件夹中的内容:

#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'