使用cmd bash将目录更改为ruby

使用cmd bash将目录更改为ruby,ruby,bash,path,Ruby,Bash,Path,我将此代码创建到ruby中,用于生成一个目录并更改此目录中的位置。但它不起作用,我理解bash返回错误的原因 sh: :1 cd /path/ not found: 这是我用ruby编写的代码 #!/usr/bin/ruby def pr_cartella @cartella=ARGV[0] #prendo l'argomento Dir.mkdir @cartella #creo la cartella dall'argomento ottenuto if Dir.exist?

我将此代码创建到ruby中,用于生成一个目录并更改此目录中的位置。但它不起作用,我理解bash返回错误的原因

sh: :1 cd /path/ not found:
这是我用ruby编写的代码

#!/usr/bin/ruby

def pr_cartella
  @cartella=ARGV[0] #prendo l'argomento
  Dir.mkdir @cartella #creo la cartella dall'argomento ottenuto
  if Dir.exist? @cartella
    puts "bene la cartella è stata creata"
    Dir.chdir @cartella
    entra
  end
end

def entra
  comando = "cd " + Dir.pwd + @cartella
  %x[ "#{comando}" ]
end

pr_cartella

看起来您试图更改目录两次,这导致了错误的发生

def pr_cartella
  @cartella=ARGV[0] 
  Dir.mkdir @cartella # This makes the directory
  if Dir.exist? @cartella # Assuming the mkdir passed, the always succeeds
    puts "bene la cartella è stata creata"
    Dir.chdir @cartella # This changes from pwd to the newly made directory
    entra
  end
end
然后在
entra
方法中,您尝试使用系统级命令更改它,但您已经使用更改了它。文件规定:

将进程的当前工作目录更改为给定字符串

因此,这种方法:

def entra
  comando = "cd " + Dir.pwd + @cartella # Dir.pwd is already /path/to/@cartella
  %x[ "#{comando}" ]
end
实际上是在努力做到:

cd /path/to/@cartella/@cartella
由于您在评论中进行了扩展,说您实际上是在试图影响终端会话,因此我想指出,您不能像这个重复问题中所讨论的那样使用ruby来实现这一点:

使用%x(cd)是毫无意义的。命令完成后,您将回到以前的位置

如果您使用Dir.chdir,然后将shell输出到某个地方,那么您已经在以前使用过chdir的目录中,除非您的shell隐式地寻找某个文件(例如:.bashrc,…),并且该文件将执行chdir

换句话说,如果我做了一个

Dir.chdir('goofy')
x=%x(pwd)

如果目录goofy存在,变量x将包含类似“/…../../../../../goofy”的内容。

解决方案就在这段代码中

def pr_cartella
 @cartella=ARGV[0] #prendo l'argomento
 Dir.mkdir @cartella #creo la cartella dall'argomento ottenuto
 if Dir.exist? @cartella
 puts "bene la cartella è stata creata"
 Dir.chdir @cartella
 exec 'bash'
 end
 end
 pr_cartella

谢谢大家。

你怎么称呼这个?什么是ARGV[0]?您在没有参数的情况下调用函数
pr_cartella
,然后使用
ARGV[0]
读取第一个参数……是的,我在调用脚本时编写参数,示例:./namescript.rb namefolder。它之所以能工作,是因为创建了文件夹,但没有进入新文件夹。但是,在shell中更改目录的方法是什么???这是我的问题,所以我必须只写这个:comando=“cd”+Dir.pwd+我尝试了。现在的路径是正确的,但不起作用。shell返回相同的错误。@为什么需要更改shell的目录?我的观点是,代码在脚本期间更改当前目录。如果需要从脚本内部运行另一个shell命令,并且需要从某个目录执行该命令,则可以使用
Dir.chdir
块执行该命令。如果你告诉我们为什么你需要做一些事情,我们可以为你指出一个更好的方向OK,但是如果我想在创建目录后改变目录,我不明白你问题的意思。“更改目录”的确切含义是什么?改名?让它成为你的工作目录?在后一种情况下,Dir.chdir正是这样做的。问题出在哪里?我需要用ruby创建一个文件夹并进入其中。但是我必须在里面,不是在ruby脚本中,而是在shell中。在终端中,我不想写这个:mkdir namefolder&&cd namefolder。当我在/usr/bin中移动ruby脚本时,我想在terminal:script.rb namefolder中写入,它必须是create a folder并进入内部为什么要在脚本中(而不是在ruby程序中)执行chdir,一旦进入SKcript,你想做什么?当然,您可以执行
系统(“mkdir x&&chdir x&&my_script.sh”)
,然后在目录x内运行
my_script.sh
,但不要忘记,在执行my_script.sh之后,您将回到执行chdir之前所在的目录。这可能不是你想要的。