• ベストアンサー

コマンドのを教えてください

以下のコマンドが思うように動きません。 Ubuntuで実行しています。 xとyの乱数を出してそれを${x}と${z}に入れて実行したいのですが数字が入りませんなぜなのでしょうか? 教えてください #!/bin/bash SCREEN_NAME='minecraft' x='echo $RANDOM' z='echo $RANDOM' sudo screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "spreadplayers ${x} ${z} @a\015"'

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.4

>sudo screen -S $SCREEN_NAME -X stuff 'setworldspawn ${x2} ${y2} ${z2}\015' #2の方が例で書かれた部分だけしか目に入ってないようなんですけど 注意されたものが上記の部分にも見当たりませんか。

hikatyann77
質問者

お礼

ありがとうございます!見落としてました。

その他の回答 (3)

  • _kappe_
  • ベストアンサー率68% (1523/2217)
回答No.3

回答No.2の者です。 バッククオートを使っても、クオート無しで単に$RANDOMを使っても、想定通りに動作しました。下記の結果を見てください。 $ cat random.sh x='echo $RANDOM' y=`echo $RANDOM` z=$RANDOM echo x = ${x} echo y = ${y} echo z = ${z} $ bash random.sh x = echo $RANDOM y = 10633 z = 13281

hikatyann77
質問者

お礼

ありがとうございます!助かりました!

hikatyann77
質問者

補足

そちらのコマンドは動作するようになりました。 ですが以下のコマンドは正常に作動せず「${x2} ${y2} ${z2}」の部分が0(値が表示されない)です。 #!/bin/bash SCREEN_NAME='minecraft' y2=`echo $RANDOM` z2=`echo $RANDOM` x2=`echo $RANDOM` sudo screen -S $SCREEN_NAME -X stuff 'setworldspawn ${x2} ${y2} ${z2}\015'

  • _kappe_
  • ベストアンサー率68% (1523/2217)
回答No.2

シングルクオートではなくバッククオートを使ってください。バッククオートは、日本語キーボードの場合Shift+@で入力できます。 × x='echo $RANDOM' ○ x=`echo $RANDOM` しかし、この場合はわざわざechoを使う必要はなく、単純に x=$RANDOM でいいのではないかと。

hikatyann77
質問者

補足

#!/bin/bash x=`echo $RANDOM` z=`echo $RANDOM` echo ${x} ${z} のスクリプトでも表示されませんでした

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.1

シングルクォテーションで囲んだ場合、シェル変数の展開等はしないですよ。

関連するQ&A

  • サービスの終了処理が実行されない

    MinecraftのサーバをLinux上でサービスとして実行しようと思い、最下部に示したシェルを作成し、 # chkconfig --add Minecraft を実行しました。 再起動を行ってみたところ再起動後もMinecraftのサーバは正常に起動していたのですが、 Minecraftのサーバログを確認すると終了処理が行われず、そのままプロセスがKillされています。 また、 # service Minecraft stop を実行した場合には正常に終了した事を示すログが出力されていました。 環境は以下のとおりです。 OS:CentOS 5.5(Kernel 2.6.18) Java:1.6.0_25(64bit) minecraft_server.jar:beta 1.5_02 何かするべきことが漏れているのでしょうか。 アドバイスよろしくお願いします。 /etc/init.d/Minecraft #!/bin/sh # chkconfig: 2345 99 01 SCREEN_PATH=/usr/local/bin SCREEN_NAME=minecraft-server MINECRAFT_ROOT=/root/Minecraft DEFAULT_STOP_WATE_TIME=60 MIN_MEMORY=1024M MAX_MEMORY=4096M start(){ cd ${MINECRAFT_ROOT}/conf ${SCREEN_PATH}/screen -AmdS minecraft-server java -Xms${MIN_MEMORY} -Xmx${MAX_MEMORY} -jar ../bin/minecraft_server.jar nogui > test.txt } stop(){ ${SCREEN_PATH}/screen -S ${SCREEN_NAME} -p 0 -X eval "stuff save-all" while [ ${DEFAULT_STOP_WATE_TIME} -ne 0 ] do if test `expr ${DEFAULT_STOP_WATE_TIME} % 30` -eq 0 -o ${DEFAULT_STOP_WATE_TIME} -le 10 then ${SCREEN_PATH}/screen -S ${SCREEN_NAME} -p 0 -X eval "stuff say\040Server\040will\040stop\040in\040${DEFAULT_STOP_WATE_TIME}\040seconds.\015" fi DEFAULT_STOP_WATE_TIME=`expr ${DEFAULT_STOP_WATE_TIME} - 1` sleep 1 done ${SCREEN_PATH}/screen -S ${SCREEN_NAME} -p 0 -X eval 'stuff stop\015' sleep 10 } restart(){ stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac exit 0

  • シェルスクリプトで$RANDOMの値が表示できません

    #!/bin/sh DATA=$RANDOM echo $DATA としたとき,何も出力されないでスクリプトが終了してしまいます.bashモードでコンソールから echo $RANDOM とやれば乱数は表示されます. どのようにすれば表示させることができるのでしょうか?

  • Linux Screen Command

    友人と遊ぶのにプライベートのマインクラフトのサーバーを建てています。 screen"minecraft"へ"stop"ってコマンドを送信したいのですが、 screen -r minecraft -X stop では、正常に送信されてないようなのです。 ちなみに screen -r minecraft -X quit なら送信されて正常にスクリーンが終了されます。 どうしたらいいでしょうか?

  • WindowsのRANDOM関数を用いたバッチファイル

    お世話になります。 以下のようなバッチファイルを作成しました。 ----------------------- @echo off SET RND=%RANDOM% echo %RANDOM% pause ----------------------- 期待する動きとしては、バッチの実行時に毎回0~32767の 乱数のいずれかが表示されてほしいのですが、9012,9020,9023,9026のように微増していく数字が表示され、とても乱数とはいえない状態です。 ちょっとした思い違いなのかもしれませんが、行き詰まってしまっています。DONコマンド,バッチに詳しい方、ご教授ください。

  • sudo createdbをnopasswdで実行

    sudoをnopasswdで設定しているにも関わらずpostgresユーザーで sudo createdb を行うとパスワードを聞いてきます。 sudo 設定内容 postgres ALL=NOPASSWD: ALL 実際に行ったコマンド -bash-4.1$ sudo -u hogehoge /usr/bin/createdb -U hogehoge -W hogehoge -E UTF-8 -D hogehoge -w [sudo] password for postgres: nopasswdで実行出来れば最終的にcronでの定期実行を考えています。 環境は以下の内容です。 CentOS-6.2-x86_64 PostgreSQL 9.3.16 よろしくお願い致します。

  • PHPでUNIXコマンドを発行してファイルへ追記できない

    PHPでUNIXコマンドを発行してファイルへ追記できない 現在,/etc/aliasesファイルへ,PHPから文字列を追加したいのですが,うまくいかず,皆様のお知恵を頂ければと思います. 現在,sudoersにapacheユーザを追加しており,パスワードを渡せば全権限を持たせています. それで,PHP上で $command = "echo '".___APACHEPASS___."' | sudo -S cp /etc/aliases /etc/alias_bak/aliases.bak.".date("YmdHis"); exec($command, $output); とすれば,aliasesファイルのバックアップファイルが生成されます. ところが,文字列を追記するため,コマンド $command = "echo '".___APACHEPASS___."' | sudo -S echo '{$_POST['user_name']}: | /var/www/html/test.php' >> /etc/aliases"; を発行しても追記されません. バックアップファイルコマンドが実行されれば,/var/log/secureにログが残りますが,追記コマンドでは失敗のログすら記録されていません. なお,コマンド自体を表示させると, echo 'apache-password' | sudo -S echo 'user-name: | /var/www/html/test.php' >> /etc/aliases となっており,rootのコマンドラインで echo 'user-name: | /var/www/html/test.php' >> /etc/aliases を実行すれば,正常に追記されます. 乱文となってしまいましたが,追記されない原因の見当がついたかた,ご教授頂けると幸いです. よろしくお願い致します.

  • ユーザ名の習得

    ユーザ名の習得 #!/bin/bash echo ${USER} # その他いろんな処理 # . # . 上記のようなスクリプトを,fooユーザで実行したとします. 結果はfooと出力されるのですが,実はこのスクリプトをsudo権限で実行する必要があり ${USER}がrootになってしまいます. echo ${USER}の結果をログインユーザ名にしたいのですが,なにか案はないでしょうか? #sudo権限が必要になるのは/usr/local/sbinに実行ファイルをコピーする必要があるからです. #ほかもいろいろありますが・・・

  • 乱数の生成について

    下記のスクリプトではボタンをクリックして乱数を生成しています。 ボタンをクリックする事無く、windowが開くと同時に乱数を生成するにはどのようにすれば良いでしょうか? <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- function gen_random(num1, num2) { retval=Math.random(); document.myform.ans.value = (Math.floor(retval * (num2 - num1)) + eval(num1)); } //--> </SCRIPT> </HEAD> <BODY> <center> <form name=myform> 乱数の範囲 <input type=hidden name=d1 value=1000> <input type=hidden name=d2 value=9999> <input type=button name=btn1 value=乱数発生 onClick=gen_random(myform.d1.value,myform.d2.value)><br> 乱 数:<input type=text name=ans size=4> </form> </center> </BODY> </HTML>

  • 乱数にするとエラーになります

    初心者です。CGI掲示板の投稿欄に投稿キーを設置しました。 --------------------------------------------------------- print<<"_FORM_"; <input type=text name=guard size=8$ff> <b> 555 と半角で入力</b> _FORM_ ログ書きこみ処理 if ($FORM{'guard'} ne "555"){&er_(" エラーです。 ");} --------------------------------------------------------- (以上は全て bbs.cgi ファイルに記入) この状態で正常に作動します。(555 入力で○ それ以外は×) これを乱数でやろうと思い自分で付け加えました。 $random_x = int( rand(999) ) + 1; (set.cgi というファイルに記入) 555 の部分を $random_x に変更してbbs.cgiプログラムを書き換えるのですが、 表示された乱数を入力しても「エラーです」と表示され投稿できません。 どこが間違ってますでしょうか?よろしくお願いします。

  • phpヒアドキュメントスクリプトを実行する

    bashシェルスクリプトは例えば test.sh: #!/bin/sh phpscript=`cat <<'EOF' $x=2; $y=3; $z=$x+$y; echo "{$x}プラス{$y}イコール{$z}。\n"; exit; EOF ` php -r "$phpscript" と書けますが1行少なくするために 文字列変数$phpscriptを使わないで 最後の php -r "$phpscript" と phpscript=`cat <<'EOF' をまとめて test.sh: #!/bin/sh php -r `cat <<'EOF' $x=2; $y=3; $z=$x+$y; echo "{$x}プラス{$y}イコール{$z}。\n"; exit; EOF ` としても機能しません 1行少なくするためにはどのように書けばよいのでしょうか? よろしくお願いします

    • ベストアンサー
    • PHP