2

ローカル マシンに Apache Tomcat をインストールするための Ruby スクリプトを作成しました。スクリプトを実行すると、現在のディレクトリを目的のディレクトリに変更できません。

cmd = "mkdir /usr/java"
system(cmd)

cmd = "cp /home/user/Downloads/file.txt   /usr/java/"
system(cmd)

sleep(2)      

cmd = "cd /usr/java/"
system(cmd)

上記のコードでは、コマンドmkdircpコマンドは正常に機能しますが、問題はcdコマンドにあります。その後、現在のディレクトリはまだ/、つまり/usrディレクトリの親です。

更新:の使用は機能しましたが、変数と変数Dir.chdir()の設定でもう 1 つの問題に直面しています。私のコードは次のとおりです。JAVA_HOMEPATH

cmd = "JAVA_HOME=/usr/java/jdk1.7.0_05"
system(cmd)
cmd = "export JAVA_HOME"
system(cmd)
cmd = "PATH=$JAVA_HOME/bin:$PATH"
system(cmd)
cmd = "export PATH"
system(cmd)
4

2 に答える 2

4

への各呼び出しsystem()は、他とは完全に個別に実行されます。それらの間で共有される隠しシェル セッションはありません。(実際、それらはそれぞれ独自のプロセスで実行されていると確信しています-cd動作しますが、プロセスには影響しません。)プロセスのディレクトリはDir.chdir(). また、コマンドを使用する前にコマンドを変数に入れる必要もありません。私はこのようなことをします:

system("mkdir /usr/java")
system("cp /home/user/Downloads/file.txt /usr/java/")
Dir.chdir("/usr/java/")

sleep()コピーが完了するのを待っているだけの場合は、その必要がないことに注意してください。system()すでにコマンドが終了するのを待っています。そうでなければsleep(2)、とにかく壊れやすいでしょう。

更新:更新された情報では、少なくともスクリプトのこの部分については、シェル スクリプトを使用した方がよいようです。を介して Ruby で環境変数を設定することもできENVますが、それは厄介です。このようなものはより理にかなっています:

#!/bin/bash

mkdir /usr/java
cp /home/user/Downloads/file.txt /usr/java/
cd /usr/java/
export JAVA_HOME=/usr/java/jdk1.7.0_05
export PATH=$JAVA_HOME/bin:$PATH

Ruby から呼び出す必要がある場合は、 を使用system()してスクリプトを実行するだけです。必ず実行可能ビットを設定するか、シェルで呼び出してください (例: system("bash script_name"))。

于 2012-08-16T06:22:02.500 に答える
1

使用してみることができます Dir.chdir '/usr/java/'

また、irb セッションで現在のファイルを表示するには、`ls` を実行できます。

于 2012-08-16T05:45:51.497 に答える