使用cmd bash将目录更改为ruby
我将此代码创建到ruby中,用于生成一个目录并更改此目录中的位置。但它不起作用,我理解bash返回错误的原因使用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?
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之前所在的目录。这可能不是你想要的。