アプリ版:「スタンプのみでお礼する」機能のリリースについて

bashのシェルスクリプトで

#!/bin/bash -x
CMD=/bin/service portmap restart;/bin/service nfslock restart;/bin/service nfs restart
$CMD

としたのですが2行目で既にコマンドが実行されてしまいます。
空白がある場合のコマンドは変数にどう記述したらいいのでしょうか?

A 回答 (5件)

CMD="/bin/service portmap restart;/bin/service nfslock restart;/bin/service nfs restart"



eval $CMD

で実行できます。
文字列をコマンドとして認識させればいいのです。
    • good
    • 0
この回答へのお礼

遅くなりまして申し訳有りません。

> CMD="/bin/service portmap restart;/bin/service nfslock restart;/bin/service
> nfs restart"
> eval $CMD
> で実行できます。
> 文字列をコマンドとして認識させればいいのです。
有難うございます。
これで出来ました。

> 空白があるだけなら#1,#2さんのかかれた通り " " で囲むだけでOKです。または ' '
> でもいいです。
> CMD1="/bin/service portmap restart"
> CMD2="/bin/service nfslock restart"
> CMD3='/bin/service nfs restart'
> $CMD1;$CMD2;$CMD3
>
> セミコロンでマルチステートメントにするところまで1変数に入れるなら、#4さんの
> お書きのように、eval が必要です。空白のためで無くセミコロンのためです。
有難うございます。
参考になります。

お礼日時:2005/03/09 02:14

「空白があるときどうするか」というのが疑問のようなので、#4さんの回答の補足です。



空白があるだけなら#1,#2さんのかかれた通り " " で囲むだけでOKです。または ' ' でもいいです。
CMD1="/bin/service portmap restart"
CMD2="/bin/service nfslock restart"
CMD3='/bin/service nfs restart'
$CMD1;$CMD2;$CMD3

セミコロンでマルチステートメントにするところまで1変数に入れるなら、#4さんのお書きのように、eval が必要です。空白のためで無くセミコロンのためです。
    • good
    • 0
この回答へのお礼

遅くなりまして申し訳有りません。

> CMD="/bin/service portmap restart;/bin/service nfslock restart;/bin/service
> nfs restart"
> eval $CMD
> で実行できます。
> 文字列をコマンドとして認識させればいいのです。
有難うございます。
これで出来ました。

> 空白があるだけなら#1,#2さんのかかれた通り " " で囲むだけでOKです。または ' '
> でもいいです。
> CMD1="/bin/service portmap restart"
> CMD2="/bin/service nfslock restart"
> CMD3='/bin/service nfs restart'
> $CMD1;$CMD2;$CMD3
>
> セミコロンでマルチステートメントにするところまで1変数に入れるなら、#4さんの
> お書きのように、eval が必要です。空白のためで無くセミコロンのためです。
有難うございます。
参考になります。

お礼日時:2005/03/09 02:13

よく見たら、脊椎反射で回答してました。

すみません。
コマンド動かすなら、シェル内にコマンド記述して引数に変数使うのが普通です。

#!/bin/bash -x
PRA1=restart
/bin/service portmap $PRA1
/bin/service nfslock $PRA1
/bin/service nfs $PRA1

とかなら上手く行くと思うのですが・・・

この回答への補足

ご回答有難うございます。

これなら上手くいきますが、

コマンドに空白が入る場合の変数代入はどうするのか疑問に思ったのでした。

これができれば、オプション付きコマンドとかも変数に代入出来、卯クリプトファイル管理が凄くし易くなると思ったのです。

補足日時:2005/02/21 14:25
    • good
    • 0

何で書かないと判らんのだろう?



CMD=/bin/service portmap restart;/bin/service nfslock restart;/bin/service nfs restart


CMD="/bin/service portmap restart;/bin/service nfslock restart;/bin/service nfs restart"

したら駄目?

この回答への補足

はい、ダメでした。

CMD="/bin/service portmap restart;/bin/service nfslock restart;/bin/service nfs restart"

としたら既述のエラーが出たのです。

補足日時:2005/02/21 09:44
    • good
    • 0

ダブルクォートとかで囲んだら如何でしょうか?



参考URL:http://www.atmarkit.co.jp/flinux/rensai/linuxtip …

この回答への補足

有難うございます。


+ CMD=/sbin/service portmap restart;/sbin/service nfslock restart;/sbin/service nfs restart
+ /sbin/service portmap 'restart;/sbin/service' nfslock 'restart;/sbin/service' nfs restart
使い方: /etc/init.d/portmap {start|stop|status|restart|reload|condrestart}

となってしまいます。

補足日時:2005/02/21 00:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!