質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

3回答

2359閲覧

perlでshellの&&みたいにしたい。

shigoto

総合スコア30

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2017/01/25 01:24

shellでコマンドを連続実行する時、以下のように&&を使用しますが、
同じことをperlでするにはどうしたらいいでしょうか。

例:
cat a.txt && cat b.txt && ls /home

左のコマンドを正常に実行したら、右のコマンドを
順番に実行していく。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2017/01/25 03:07

Perlのバージョンを明記して下さい。
guest

回答3

0

perlからlinuxのコマンドを連続実行する方法についてをお尋ねしています。

こういうことですか?

2つ目のコマンドでエラー(終了コードが 0以外)の場合

bash

1$ perl -e "! system('ls -al /etc/passwd') and ! system('ls -al /etc/PPAP') and ! system('ls -al /etc/group /etc/passwd');"

-rw-r--r-- 1 root root 2796 5月 16 12:36 2016 /etc/passwd
ls: cannot access /etc/PPAP: そのようなファイルやディレクトリはありません

全てのコマンドが実行される場合

bash

1$ perl -e "! system('ls -al /etc/passwd') and ! system('ls -al /etc/group') and ! system('ls -al /etc/group /etc/passwd');"

-rw-r--r-- 1 root root 2796 5月 16 12:36 2016 /etc/passwd
-rw-r--r-- 1 root root 1315 5月 16 12:36 2016 /etc/group
-rw-r--r-- 1 root root 1315 5月 16 12:36 2016 /etc/group
-rw-r--r-- 1 root root 2796 5月 16 12:36 2016 /etc/passwd

投稿2017/01/25 03:27

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shigoto

2017/01/25 03:40

そうです。 perl -e "! system これの!の意味はなんでしょうか? なくてもいい?
guest

0

既にお答えが出ていますので、ご参考です。
perl の内部で コマンド && コマンド && コマンドができます。
ただsystemコマンドは、正常が0なのでFALSEですね。
ですので system() || system() || system() でも有りかと。

投稿2017/01/25 05:28

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

&&は、終了ステータスが0の場合に次のコマンドを実行するので、exit関数に戻り値を指定してください。
perldoc - exit関数

test1.pl

perl

1#!/usr/bin/env perl 2print "TEST1\n"; 3exit 0;

test2.pl

perl

1#!/usr/bin/env perl 2print "TEST2\n"; 3exit 1;

test3.pl

perl

1#!/usr/bin/env perl 2print "TEST3\n"; 3exit 0;

実行結果

bash

1[HOGE@DUMMYHOST ~]$ ./test1.pl && ./test2.pl && ./test3.pl 2TEST1 3TEST2 4[HOGE@DUMMYHOST ~]$

投稿2017/01/25 01:54

ester41

総合スコア148

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shigoto

2017/01/25 02:31

すみません、perlからlinuxのコマンドを連続実行する方法についてをお尋ねしています。
ester41

2017/01/25 03:43

perl上で実行される場合だったのですね。 申し訳ないです。 perlから動かす場合は、以下の2パターンあると思います。 (サンプルでは、exec関数やsystem関数ではなく、バッククォート演算子を使用します) ・shellと同じように実行する [HOGE@DUMMYHOST ~]$ perl print `./test1.pl && ./test2.pl && ./test3.pl`; TEST1 TEST2 [HOGE@DUMMYHOST ~]$ ・$?を使用して判定を行う [HOGE@DUMMYHOST ~]$ perl if ( !_exec_command('./test1.pl') ) { if ( !_exec_command('./test2.pl') ) { _exec_command('./test3.pl'); } } sub _exec_command { my ($command) = @_; print `$command`; return $?; } TEST1 TEST2 [HOGE@DUMMYHOST ~]$
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問