2016-06-15 28 views
1

私はPerlスクリプトでディレクトリ内にソフトリンクを作ろうとしています。`ln -s TARGET DIRECTORY`のようなディレクトリ内でシンボリックリンクを作るにはどうすればいいですか?

私はこのようなディレクトリ/home/scripts/home/apuntesへのリンクを作成するためにlnを使用することができます。

ln -s /home/apuntes /home/scripts 

しかし、私は、Perlでこれを行う方法を知りません。試しました

symlink("home/apuntes", "home/scripts"); 

ただし、リンクが作成されていないため、エラーはありません。誰でも助けてくれますか?

+0

PD:システムコールを使用できません – Ghafit

+1

symlink( "home/apuntes"、 "home/scripts")はシェルコマンドの 'ln -s/home/apuntes/home/scripts'とは異なります。コールにはスラッシュが先頭に付きません。それはあなたの問題ですか? – mob

+1

もしあなたがまだそれをやっていなければ、エラーのために '$!'をチェックしてください。 – mob

答えて

-1

system(" ln -s /home/apuntes /home/scripts");

+1

質問はPythonではなくPerlに関するものです。しかし、Python固有のインポートを削除しても、同じことをする組み込みのコマンドがある場合には、 'system'を使う理由はありません。 – ThisSuitIsBlackNot

+0

私はシステムコールを使用できません: – Ghafit

2

について何symlink('/home/apuntes', '/home/scripts')を試してみましたか? (あなたの質問は/ homeなしでそれを言及します。)失敗した場合に成功して1を返し、0を返します(そして$!を設定します)。

通常、ルートのみが/homeへの書き込みアクセス権を持ちます。あなたはそれをrootとして実行していますか?

これが私のために正常に動作します:

sudo perl -wE'say symlink("/home/ysth","/home/xysth") || "Error: $!"' 

印刷1初めてと:二度目の「エラーファイルが存在します」。

sudo strace perl -wE'say symlink("/home/ysth","/home/xysth") || "Error: $!"'を実行すると、(他の多くのものの後に)提供します:

symlink("/home/ysth", "/home/xysth") = 0 
write(1, "1\n", 21 
)      = 2 

と第二の時間を実行するには与える:あなたがしようとすると起こる

symlink("/home/ysth", "/home/xysth") = -1 EEXIST (File exists) 
write(1, "Error: File exists\n", 19Error: File exists 
) = 19 

何?

+0

はい、私はrootとして実行しており、symlink( '/ home/apuntes'、 '/ home/scripts')も試しています 1を返し、作成しませんソフトリンク – Ghafit

+0

どのようなOSですか?おそらくstraceの下でそれを実行し、それがあなたに何かを伝えるかどうか見てみましょう? – ysth

+0

更新された回答。正しい順序でパラメータを指定していることを確認していますか(既存のファイルを最初に、新しいシンボリックリンクの名前を秒)。 – ysth

2

Perlのsymlinkは、lnのようにリンク名の代わりにディレクトリを渡すことをサポートしていません。あなたはリンク名合格する必要があります:

symlink('/home/apuntes', '/home/scripts/softlinkname'); 
+0

@ThisSuitIsBlackこれはlnとperlのシンボリックリンクとの間に相違がありません。 lnには 'ln TARGET DIRECTORY'形式と' ln TARGET LINK_NAME'形式がありますが、シンボリックリンクには後者しかありません。これは良い答えですが、実際に何が望まれているのかの詳細は不足していました(そして、OPがシンボリックリンクを返すと言ったところで、おそらく間違っていました) – ysth

+0

@ysth Aha!私はその形、良いキャッチについては知らなかった。 – ThisSuitIsBlackNot

0

を私は最近、同様の問題に直面していたが、それは私が、私はシンボリックリンクを呼んでいた私の方法にメソッドに渡した引数に先頭の空白があったことが判明しました同じ議論がある。これらの小さな詳細を確認してください。私はそれが動作すると確信しています!

関連する問題