Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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
在Ruby脚本中更改用户的目录_Ruby_Ruby 2.0 - Fatal编程技术网

在Ruby脚本中更改用户的目录

在Ruby脚本中更改用户的目录,ruby,ruby-2.0,Ruby,Ruby 2.0,我非常熟悉Dir.chdir(“/xyz”) 不幸的是,这会更改进程的目录,但实际上不会更改用户的目录。我将用下面的例子来说明我的需要 $~/: ruby my_script.rb CHANGING TO PATH FOR USER NOT SCRIPT $/Projects/Important/Path: pwd $/Projects/Important/Path 看到了吗?我需要脚本来更改用户的路径。执行system/backticks/Dir.chdir都会调整进程路径,并以用户坐在开

我非常熟悉Dir.chdir(“/xyz”)

不幸的是,这会更改进程的目录,但实际上不会更改用户的目录。我将用下面的例子来说明我的需要

$~/: ruby my_script.rb
CHANGING TO PATH FOR USER NOT SCRIPT

$/Projects/Important/Path: pwd
$/Projects/Important/Path
看到了吗?我需要脚本来更改用户的路径。执行system/backticks/Dir.chdir都会调整进程路径,并以用户坐在开始的位置而不是我想要的路径结束


从我所读到的
exec
是一条出路,因为它接管了现有的流程。。。但是没有用。

你不能,但是你可以做一些可能足够好的事情。您可以从ruby调用另一个shell:

Dir.chdir("/xyz")
system("bash")

运行此命令将创建一个新的bash进程,该进程将在
/xyz
目录中启动。缺点是,更改此过程将使您回到ruby脚本,并假设它立即结束—回到启动ruby脚本的bash过程。

另一种可能有效的方法是将其用作在每个命令后调用的hackish hook。在ruby脚本中,您可以将新目录的路径写在可以从bash和ruby读取的地方(例如一个文件,但不是一个环境变量!)。在
PROMPT_命令
函数中,检查该文件并
cd
查看其中写入的内容。只需确保您删除了该文件,这样您就不会在每次运行命令后自动获得
cd
ed。通常,您的shell不会让它调用的子进程更改它的状态。您甚至无法运行shell脚本来执行您试图执行的操作。做类似事情的唯一方法是“寻源”脚本,它不会创建子shell,但您不能“寻源”Ruby脚本(或使Ruby脚本在外部子shell中寻源)。我已经阅读了
exec
,但它没有像承诺的那样工作。您可以编辑或创建.profile或其他shell配置文件,但这不会影响当前的流程,这是行不通的。比如我“我使用的zsh没有提示_命令。当你发现编程的局限性时,尤其是在花时间去做一个你认为应该没有这样障碍的项目之后,总是很难过的。打开另一个shell不是我的答案,对不起。随着调用次数的增加,用户将被深深地埋藏在子shell中,这将证明是无用的。你真的需要一个ruby脚本吗?您是否考虑过改用bash函数?