ここでは、Bash変数の使用と外部コマンドの実行に2つのクエリがあります。
Perlで%ENV
hashは、物事がASスクリプトまたは変更のために微妙に異なる意味を有することができるように、環境変数を
perl -wE'say $ENV{PWD}'
は、しかし、あなたは、多くの場合、スクリプト内で同等になったほうが良いです、ありますスクリプトが実行されます。
さらに重要なことに、シェルコマンドを使用すると、クォート、シェルインジェクション、および解釈に関するあらゆる種類の潜在的な問題が発生します。たとえば、あなたが表示するコマンドは、Charles Duffyのコメントに記載されているように、危険です。原則として、Perlの豊富な機能を使う方が良いです。例
を参照してください。あなたが外部コマンドを実行する必要がない場合には
、それはsystemの多引数の形式を使用することにより、たとえば、完全にシェルを避けるのがベストです。コマンドの出力が必要な場合は、それを提供するPerlのさまざまなモジュールがあります。以下のリンクを参照してください。
シェルの機能を使用する必要がある場合は、シェルが必要なものを受け取れるようにすべてをちょうど引用する代わりに、String::ShellQuoteのような準備ツールを使用してください。
いくつかの例:
注意。あなたがBashを望むなら、system('/bin/bash', '-c', @cmd)
が必要です。例とのリンクを参照してください。
ここでは、質問の背後にある目的に関する完全な例を示します。
プログラムの作業ディレクトリは、起動方法によっては予想外になる場合があります。 1つは、chdir
の後に変更されます。私はPWD
であなたの正確な意図は分かりませんが、PerlでコアCwd :: cwd
とFindBin :: $RealBin
があります。パスは、スクリプトの場所がFindBin::$RealBin
の代わりcwd
使用することを意図されている場合は
は、現在の作業ディレクトリ
use warnings;
use strict;
use Cwd qw(cwd);
my $cwd = cwd;
my $path = '/first/path';
symlink($path, "$cwd/second/path") or die "Can't make a symlink: $!";
次の相対パスで、$path
へのシンボリックリンクを作成します。
symlinkでは、リンク名の代わりにディレクトリを渡すことはできません。 this pageを参照してください。
'PWD' *はbash(そして' zsh'のような他のシェル)によって*エクスポートされます。それを確認するには '/ usr/bin/printenv'を使います。 *魔法*環境変数 –
@BasileStarynkevitch、私は訂正しました。 –
'$ $ 'をエスケープするために' \ $ 'を使用してください。 – Arkadiy