我将此代码创建为ruby,用于创建一个目录并更改该目录中的位置。但是它不起作用,我理解bash返回错误的原因。
sh: :1 cd /path/ not found:这是我的红宝石密码
#!/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发布于 2015-08-11 18:32:50
解决方案在这段代码中。
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多亏了所有人。
发布于 2015-08-10 14:16:22
看起来您正在尝试更改目录两次,这将导致错误发生。
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方法中,您尝试使用系统级命令来更改它,但是您已经用Dir.chdir更改了它。这些文件指出:
将进程的当前工作目录更改为给定的字符串。
所以这个方法:
def entra
comando = "cd " + Dir.pwd + @cartella # Dir.pwd is already /path/to/@cartella
%x[ "#{comando}" ]
end实际上是在尝试:
cd /path/to/@cartella/@cartella由于您在注释中进行了扩展,表示您实际上试图影响终端会话,所以我想指出,您不能像在这个重复的问题:如何从红宝石脚本在文件夹中(终端) cd中所讨论的那样,使用ruby来完成这个任务。
发布于 2015-08-10 14:31:58
在某个地方使用%x(cd )是没有意义的。在命令完成后,您将返回到以前的位置。
如果您使用Dir.chdir,然后将shell发送到某个位置,那么您已经在您以前已经编辑过的目录中了,除非您的shell正在隐式地查找某个文件(例如:.bashrc,.),并且该文件将执行chdir。
换句话说:如果我做了
Dir.chdir('goofy')
x=%x(pwd)目录goofy存在时,变量x将包含‘/../goofy’之类的内容。
https://stackoverflow.com/questions/31921740
复制相似问题