• ベストアンサー
  • 困ってます

AppleScriptでUnixコマンドの不明点

いつもお世話になってます スクリーンショットを撮るのにシェルスクリプトを使用しています 以下のスクリプトです #!/bin/bash screencapture -iWS 0.png sips -s format jpeg 0.png --out ~/Desktop/SS`date +%H%M%S`.jpeg rm 0.png これをAppleScriptで利用したく思いスクリプトエディタで記述しました do shell script "screencapture -iWS 0.png; sips -s format jpeg 0.png --out ~/Desktop/SS`date +%H%M%S`.jpeg; rm 0.png" これでスクリーンショットを撮る分には問題ありませんが AppleScript実行後スクリンショット確定前にescでキャンセルすると 下記AppleScriptエラーとなってしまいます Warning: 0.png not a valid file - skipping Error 4: no file was specified Try 'sips --help' for help using this tool 想像するにAppleScriptの改行が解らないので[;]の部分が間違ってるのかな?とそうぞうしているのですが スクリプト初心者のため何が悪いのか解りません シェルスクリプトのままで良いじゃないと思われるかも知れませんが、XcodeでGUI化したいのでAppleScriptにと考えています 原因を解決法をご教授よろしくお願いします

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数320
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1
  • kai123
  • ベストアンサー率53% (88/163)

このシェルスクリプトは スクリーンキャプチャ→フォーマットをpngからjpgに変換して保存→ 元のpngファイルを削除ということですよね。 で、スクリーンキャプチャ確定前にESCにてキャンセルすると エラーがでるってことですよね。 このエラーは0.pngというファイルがないから フォーマット変換できないよって事では? キャプチャキャンセルした訳だからそのあとの処理はいらないですよね。 ということで、tryを使用します。 簡単に書くとこんな感じです。 try do shell script "screencapture -iWS 0.png; sips -s format jpeg 0.png --out ~/Desktop/SS`date +%H%M%S`.jpeg; rm 0.png" end try これでシェルスクリプト内でエラーが起きてもそのまま抜けることが できます。 try構文は try エラーが起きそうな命令 on error  エラー発生した時に実行したい内容 end try で、on error内がない場合はon errorは省略されます。 という感じですがどうでしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

大変勉強になりました ありがとうございました

関連するQ&A

  • シェルスクリプトでファイル削除したい

    シェルスクリプト初心者です 今回、Linuxサーバ側にある複数のファイルを削除する 必要が出てきました このため、シェルスクリプトを書いて複数(2000程度) のファイルを削除しようとして試験をしています 試験のLinuxサーバ側の/root の中にfile1,file2・・・ 等々を置いています そこに次のようなスクリプトを記載して ファイルが置かれている場所と同じ/rootに置いて実行させるのですが ************** スクリプト ******** #!/bin/sh echo "start" # # rm F1010002.JPG rm F1010003.JPG rm F1010004.JPG echo "end" ****************************** 下記のようなエラーが出ます ****************************************** start rm: cannot lstat `F1010002.JPG\r': そのようなファイルやディレクトリはありません rm: cannot lstat `F1010003.JPG\r': そのようなファイルやディレクトリはありません rm: cannot lstat `F1010004.JPG\r': そのようなファイルやディレクトリはありません end ****************************************** サーバ側にSSHで入って、 # rm F1010002.JPG とひとつひとつ打鍵していくとファイルは削除されます スクリプトの間違い等あるのでしょうか 教えていただければ幸いです なお、ファイル数2000件程度のスクリプトを記載する方法は 別のソフトを利用して作成できるので・・・その件はいいのですが・・・

  • ファイルアップロードのダイアログボックスで拡張子を固定するには

    PHP4で画像ファイルをアップロードするスクリプトを組んでいたのですが、<input type="file">のボタンをクリックしたときに表示されるダイアログボックスにおいて、拡張子を決めておいて画像ファイルのみを選択するようにはできないんでしたっけ?? 現在は、「すべてのファイル(*.*)」がデフォルトで、 画像(*.gif;*.jpg;*.jpeg;*.png) HTML (*.htm;*.html) が選択できるようになっています。 これを、 画像(*.gif;*.jpg;*.jpeg;*.png) だけ表示させたいと考えています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • マルチディスプレイ環境で定期的にスクリーンショットを保存する方法を教え

    マルチディスプレイ環境で定期的にスクリーンショットを保存する方法を教えて下さい。 環境はWindows 7 Professional 64bitです。 SG-Liveとコマドリキというフリーソフトを試したのですが、どちらもプライマリディスプレイのSSしか撮れませんでした。 全ディスプレイのSSを5秒ごとに保存、といったことがしたいです。 画像のタイトルに日付を入れたり、日にちごとにフォルダに分ける機能があるとなお良いです。 BMPではなくJPEGやPNGで保存できるとさらに良いです。

  • ニフティでメールフォームを使用する方法

    ニフティの無料HPサービスでメールフォームを使いたいのですがsendmailが使えません。 以下の説明書きがありましたが、シェルスクリプトは知識がなく、ちょっと困っています。 シェルスクリプトでも可能なものなんでしょうか? ---------------------------------------------- perlについて perlのバージョンは5です。 (ただし、perl5での標準的なモジュールは使用できません) パスは、「/usr/local/bin/perl」となります。 スクリプトの1行目は「#!/usr/local/bin/perl」と記述してください。 シェルスクリプト(sh)について シェルスクリプト(sh)に関しては、以下のコマンドがご利用可能となっております。 awk, chmod, date, egrep, expr, grep, mkdir, rmdir, sh, cat, cp, echo, env, find, ls, mv, rm, sed なお、sendmailはご利用いただけません。 --------------------------------------------------

    • ベストアンサー
    • CGI
  • newaliasesがうまくいきません

    こんばんは。atsu1100ともうします。 RedHat7.0.1、sendmail-8.12.0、CF-3.7Wpl2(patchあり)の環境で newaliasesを実行したらエラーが表示されます。 以下がその内容です。 Warning: .cf file is out of date: sendmail 8.11.1 supports version 9, .cf file i s version 8 Cannot rebuild aliases: no database format defined Cannot create database for alias file /etc/aliases もしかしたら、sendmailのバージョンは、8.11.1 を入れてるかもしれません。 /etc/aliasesのパーミッションが「644」なのですが、試しに「777」に 変えたらエラーのメッセージの内容が変わりました。 Warning: .cf file is out of date: sendmail 8.11.1 supports version 9, .cf file i s version 8 newaliases: cannot open /etc/aliases: Group writable file どうかよろしくお願いいたします。

  • 死なない(不思議な?)プロセスの振舞いについて

    プロセスの振舞いでよく分からない点がありますので、 この点に詳しい方、ぜひご教授下さい。 実験として、次のような無限ループをもつシェルスクリプトを作りました。 #!/bin/sh while : do echo "hogehoge" > tmp echo "Please stop me!" sleep 1 done このfile名を loop.sh として、実行属性を付けてから $ ./loop.sh & とバックグラウンドで実行してみます。 すると、1秒毎に、tmpにhogehogeと書き込まれ 標準出力にPlease stop me!と標準出力に表示されますが、 ここで、 exitコマンドでterminalを急に閉じてみます。 こうした場合、どうやら、このプロセスは何処かで生き続けるようなのです。 というのも、新たにterminalを起動し、上で出来た tmp をrmで消そうとしても、 すぐ新たなtmpが作られるからです。 しかも、単にlogoutしただけではこのプロセスは死なないようです。 (再起動するとさすがに止まります。) そこで質問ですが、 1) 上のプロセスが生き続けていることを確認する方法はありますか? 2) この生き続けたプロセスを再起動せずに殺す方法はありますか? 3) このようにシェルスクリプト実行中に急にexitをされた場合でも、 スクリプトが正常終了するように予めスクリプトを組むことは出来ますか? 以上3点についてご教授いただけたら幸です。 よろしくお願いします。

  • shellスクリプトに複数の引数を渡したい

    shellスクリプトに複数の引数を渡したいと考えています。 下記のようなperlスクリプトを兼ねる事でやりたいことは達成できました。 これをシェルスクリプトだけでやろうとしていて、ハマってしまい、やり方がわからなかったので、質問しています。 ・echo.shの中身 $ cat echo.sh echo $1 $2 ・imglist.plの中身 $ cat imglist.pl my@imglist= `ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} 2>1&`; foreach(@imglist){ my@name=split /\./,$_; system("bash ./echo.sh $name[0] $name[1]"); } ・実行すると、無事echo.shに引数が2つ渡る。 $ perl imglist.pl abc1 jpg abc10 png abc11 png abc2 jpg abc3 jpg これをシェルのみでやろうとして、はまってしまいました。 以下は、パイプ処理等を使ったりしてやってみたのですが出来ませんでした。 ・awkでファイル名と拡張子に分解し、パイプで渡そうとしても何故か渡らない・・ $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}'| bash ./echo.sh ・ファイルに一旦保存し、catコマンドでパイプで渡しても駄目 $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}' > imglist.txt $ cat imglist.txt | bash ./echo.sh ・echoコマンドを使ってパイプで渡しても駄目 $ echo `cat imglist.txt` |bash ./echo.sh ・for.shというファイルを作成し、for構文でimglist.txtの中身を渡すと引数が一つずつしか渡らない $ cat for.sh for id in $(cat imglist.txt); do echo $id done $ bash for.sh tile1 jpg tile10 jpg どうやれば、コマンドライン上やシェルスクリプトだけで、今回はファイル名と拡張子という形で複数行からなる2つの引数を渡すことができますでしょうか

    • ベストアンサー
    • Perl
  • cronでGPGが使えない

    次のようなデータベースをバックアップするシェルスクリプトを作成しました。 #! /bin/sh BACKUP_DIR=/home/backup FILE_NAME=testdb`date +%Y%m%d`.sql mysqldump -udumpuser -pパスワード testdb > ${BACKUP_DIR}/${FILE_NAME} gpg -r ○○@○○ -e ${BACKUP_DIR}/${FILE_NAME} rm -rf ${BACKUP_DIR}/${FILE_NAME} sqlbackup.shと名前を付けてrootで実行してみたところ問題なくバックアップできました。 しかし、/etc/crontabに 0 0 * * * root /bin/sqlbackup.sh と記述して実行してみたところ gpg: ○○@○○: skipped: public key not found となってしまいました。 rootで「gpg --import」で○○@○○の公開鍵をインポートし、「gpg --edit-key」で信頼度をI trust ultimatelyにしています。 どのような原因が考えられますでしょうか。 よろしくお願いいたします。

  • UNIXのコマンドを教えて下さい。

    AAAAという名前のテキストファイルにBBBBという文字列が含まれる行の最後に CCCCの文字列を追加したい場合、どのようなコマンドを使ったらよいでしょうか?

  • unixコマンドについて

    ユニークカウント uniq -c とすると、 カウント数<スペース>カウント対象物 例)  10 ○○△△   9 ○□ ・・・ というデザインで出力されると思いますが、 この カウント数とカウント対象物の間のスペースをタブ区切りに変更するもっとも簡単なコマンドを教えてください。 なお、カウント対象物の中にもスペースが含まれており、そのスペースはタブ区切りにしたくはないので、あくまでも、カウント数とカウント対象物の間だけを変換したいのです。 よろしくお願いいたします。