teratail header banner
teratail header banner
質問するログイン新規登録
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

3回答

2416閲覧

Linux & によるバックグラウンドについて

suvera

総合スコア106

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2016/12/16 02:32

0

0

###前提・実現したいこと
フォルダ内にある全てのスクリプトを止まることなく実行させたいです。
forとfindを使って.shファイルをsouceコマンドで事項するようにしました。

しかし、実行するスクリプトの中身の処理的に
最後にCtrl+Zで抜けなければ次の処理が実行されないところがありました。
(仕様上これを変更することはできません)

なので、バックグラウンドでスクリプトを実行するようにすれば
滞りなく実行されるのではないかと思ったのですが
やはり止まってしまいます。
バックグラウンドの実行は
最後に&を付ける方法で試しました。

実行途中に止まってしまうことなく
最後まで実行されるようにするにはどうしたら良いでしょうか?

###該当のソースコード

DIR=`dirname $0` for file in $(find $DIR -maxdepth 1 -name "*.sh"); do source $file & done

###補足情報(言語/FW/ツール等のバージョンなど)
windows7のDockerToolbox
QuickStartTerminalで実行してます。

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

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

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

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

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

guest

回答3

0

ベストアンサー

もしかしたらですが、自分自身が*.shの名前だと、自分自身を実行する事になりませんでしょうか?

sh

1#!/bin/sh 2DIR=`dirname $0` 3SLF=`basename $0` 4 5for file in $(find $DIR -maxdepth 1 -name "*.sh" |grep -v $SLF); do 6 source $file & 7done

投稿2016/12/16 03:09

編集2016/12/16 03:19
A.Ichi

総合スコア4070

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

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

suvera

2016/12/16 06:11

まさしくそれでした。 階層を改善して実行したところ問題なく動作しました。 ありがとうございました。
guest

0

A.Ichiさんの指摘があたりだと思います。自分の回答はまとをえていないですね。なぜなら

source script & ...(1)
/bin/sh script & ...(2)

どちらも子供プロセスで非同期に実行するという点では同様だからです。
(1)はそれが書いてある位置より上で設定されているshell変数を引き継いで実行し、
(2)は引き継がないというだけの違いですね。

失礼しました。


sourceは現在のシェルプロセスへスクリプトを読み込み実行するものなのですが、子プロセスで非同期に実行させたいなら

$SHELL $file &
あるいは
/bin/sh $file &

などでやってみてはいかがでしょうか。

投稿2016/12/16 02:48

編集2016/12/16 03:43
KSwordOfHaste

総合スコア18404

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

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

0

最後にCtrl+Zで抜けなければ次の処理が実行されないところがありました。

これは、「あるスクリプトがいつまで待っても終了しない」という現象ですよね。

やはり止まってしまいます。

これは具体的にどういう現象を目にしてそう思ったのでしょうか?

投稿2016/12/16 04:23

otn

総合スコア86349

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問