无法使用远程shell更改目录

时间:2011-04-04 18:23:26

标签: linux

我一直在尝试用C在Unix中创建一个远程shell。我能够连接到服务器并从中拉出命令。但是我无法改变我的pwd,即使看起来运行正常。我给它一个目录,如果该目录不存在,我将收到一个错误。下面是我一直在测试的快速shell。

  while(1)
{

  for( n = 0; n < BUFFER_SIZE; n++)
{
  command[n] = '\0';
}

  write( sockfd, buffer, strlen( buffer ) );

  read( sockfd, command, BUFFER_SIZE );

  fprintf( stderr, "Command: %s\n", command );

  dup2(sockfd, 2);
  dup2(sockfd, 1);
  dup2(sockfd, 0);

   execlp( "/bin/sh", "sh", "-c", command, (char *)NULL );

}

2 个答案:

答案 0 :(得分:2)

cd不是程序,它是一个shell内置命令,它更改shell的cwd,而不是生成该shell的程序。您正在为每个命令生成一个新的shell,因此更改后的cwd不会持久存在。

您可以尝试捕获cd的调用并自己运行chdir(),或者生成单个交互式shell并使用管道或pty(伪终端)与之通信。

答案 1 :(得分:1)

exec使用cd命令不会更改调用exec的程序的工作目录。它会激活一个更改自己的工作目录的进程,然后退出。

您必须通过调用cd系统调用而不是chdir来专门处理exec命令。