AppleScriptのAutomatorアクションをbashスクリプトに変換する


0

ワンクリックでFTPを起動するために、AppleScriptを使って(2、3のbash行と共に)Automatorアプリを書いたところです。ただし、実行速度は少し遅くなります。これがコードです:

set ftpstatus to "off"
try
    do shell script "echo \"QUIT\" | telnet 127.0.0.1" & " ftp 2>&1 | grep  \"Escape character is\" > /dev/null"
    set ftpstatus to "on"
on error
    set ftpstatus to "off"
end try
if (ftpstatus = "off") then
    set ipaddr to IPv4 address of (get system info)
    set sun to short user name of (get system info)
    do shell script "sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges
    tell application "Finder" to display alert "FTP Launched and ready for file-transfer" & character id 8233 & character id 8233 & character id 8233 & "Address: ftp://" & ipaddr & ":21" & character id 8233 & "User Name: " & sun
else
    do shell script "sudo -s launchctl unload -w /System/Library/LaunchDaemons/ftp.plist" with administrator privileges
    tell application "Finder" to display alert "FTP session closed"
end if

これがコードの動作です。

  1. FTPサーバが起動しているか確認してください
  2. そうであれば、それをオフにして「FTP session closed」というメッセージボックスを投げます。
  3. いいえの場合は、それをオンにして、私のIPアドレスとユーザー名と一緒に "FTP session open"というメッセージボックスを投げます。

このスクリプトは魅力的に動作しますが、遅すぎるので、bashシェルスクリプトに変換する方法があるかどうか疑問に思います。それは物事をかなりスピードアップするはずです。助言がありますか?

回答:


2

私は正しく理解しているかどうかわからない - あなたのスクリプトの3行目にあるかどうかあなたがチェックしているかどうか ftp 以下のスクリプトを使用することができます。

#!/bin/bash                                                                                                                   

launchctl list | grep ftpd

if [ $? != 0 ]; then
    IPADDR=$(ifconfig -a | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | grep -v 127.0.0.1)
    launchctl load "/System/Library/LaunchDaemons/ftp.plist"
    osascript -e "tell application \"Finder\" to display alert \"FTP Launched and ready for file-transfer\" & character id 8233 & character id 8233 & character id 8233 & \"Address: ftp://\" & \"$IPADDR\" & \":21\" & character id 8233 & \"User Name: \" & \"$USER\""
else
    launchctl unload -w "/System/Library/LaunchDaemons/ftp.plist"
    osascript -e 'tell application "Finder" to display alert "FTP session closed"'
fi

これを実行 sudo。 説明:

  • ジョブが実行中かどうかを確認するには launchctl list
  • IPアドレスをすばやく取得するには、私のperlスクリプトを使用してください。 grep 追加のIPアドレスを削除するには、方法が異なります。
  • 今の唯一の問題はそれです ファインダ アプリは前面に表示されませんが、必要に応じて解決できます。

IPADDRへの割り当てでは、 1 そのほかアクティブネットワークインタフェース localhost
nohillside

1
それは正しいです。私は私の答えでそれについて述べました。特定のインターフェースIPスクリプトを取得するには、変更する必要があります。
Mateusz Szlosek

Upps、そう、気づかなかった
nohillside

1
@AmitSchandilliaこのスクリプトをAppleScriptエディタに挿入して、以下のような行を追加することができます。 do shell script ... with administrator privileges パスワードの入力を求められます。もう一つの方法はあなたのスクリプトを起動するアプリケーションを作ることです。 sudo。一般的に* .appバンドル内に適切に囲まれた実行可能ファイルはTerminalを起動する必要はありません。
Mateusz Szlosek

1
そのため、アプリに昇格した特権で機能させるのは少し危険です。しかし、私はあなたがbashscriptを起動するためにObjCアプリケーションをコンパイルするのを手伝うことができます。プロンプトでパスワードを要求するか、setuid / setgidでパスワードを要求しようとするかもしれません。違いについてのいくつかの情報はここにあります: developer.apple.com/library/mac/documentation/security/…
Mateusz Szlosek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.