2016-10-15 6 views
0

この同じ問題は、a question posted to the Unix & Linux StackExchange communityでよりよく定式化されます。シェルスクリプトのコードが他の操作の前に実行される

私は、キーを押しに開くスクリプトをプログラミングし、新しいターミナル(gnome-terminalの)を開き、scrot(スクリーンショットツール)を実行しています、pomfするためにそれをアップロードし、ディレクトリにランダムな名前で画像を保存します。 catとリンクをクリップボードにコピーします。

これは問題なく動作します。何をしようとしているのは、アップロードが完了したら、端末を閉じることです。

私のスクリプトは次のように動作します。

ショートカット(PrtScr) - > gnome-terminalの-e "のpythonのパス/に/ script.py" - >スタートScrot - >保存ファイル(およびファイルへのパスを覚えておいてください) - > bash script2.sh path/to/picture - > pomf.catにアップロード - >リンクを取得する - > "xclip -selection clipboard"でクリップボードに挿入

文字列を入れた後にターミナルを閉じたいので私はこれを追加しました:

eval $(printf $link | xclip -selection clipboard && sleep 1 && pkill terminal) 

この問題は、何もcにコピーされません端子が閉じます。

しかし、「& &スリープ1 & & pkillはターミナル」せずにリンクがコピーされますが、端子が開いたままになります。

ありがとうございます。

// EDIT

まず(scrotを実行するための)スクリプト

#!/usr/bin/env python 
import os 
import uuid 
import time 

def rstring(string_length=10): 
    random = str(uuid.uuid4()) 
    random = random.upper() 
    random = random.replace("-","") 
    return random[0:string_length] 

randomString = rstring(16) 

os.system("scrot -s -q 100 /home/timon/screenshots/" + randomString + ".jpg") 

while True: 
    processRead = os.popen("ps aux | grep \"scrot -s\" | cat").read() 
    if "scrot -s" not in processRead: 
     time.sleep(1) 
    else: 
     break 
     system.sleep(3) 

os.system("/home/timon/.screenshot_stuff/./screen.sh /home/timon/screenshots/" + randomString + ".jpg") 

(スクリーンショットをアップロードするための)2番目のスクリプト

#!/usr/bin/env bash 

dest_url='https://cuntflaps.me/upload.php' 
return_url='https://a.cuntflaps.me' 

if [[ -n "${1}" ]]; then 
    file="${1}" 
    if [ -f "${file}" ]; then 
     printf "Uploading ${file}..." 
     my_output=$(curl --silent -sf -F files[]="@${file}" "${dest_url}") 
     n=0 # Multipe tries 
     while [[ $n -le 3 ]]; do 
      printf "try #${n}...\n" 
      if [[ true ]]; then 
       return_file=$(echo "$my_output" | grep "url" | sed 's/\,//g' | sed 's/\\//g' | sed 's/\"//g' | sed 's/\url://g' | tr -d ' ') 
       printf 'done.\n' 
       break 
      else 
       printf 'failed.\n' 
       ((n = n +1)) 
      fi 
     done 
      printf "$return_file" | xclip -selection clipboard && pkill terminal 
    else 
     printf 'Error! File does not exist!\n' 
     exit 1 
    fi 
else 
    printf 'Error! You must supply a filename to upload!\n' 
    exit 1 
fi 
+0

なぜ 'eval'が必要ですか? – Leon

+0

これはコマンドを実行するためのものですが、そうではありませんか? –

+0

正確ではありませんが、あなたのケースでは必要ないと思われる拡張/置換の追加レベルを追加するためのものです。実際、それは誤って使用されています。コマンドの出力を '$(...)'の中でコマンドとして実行しようとします。 – Leon

答えて

1

だから、最後に私は自分自身を思い付きました溶液。

問題はxclip自体であるようでした。 私は "xsel --clipboard --input"を使っていますが、これは直接終了した後でもうまくいくようです。

関連する問題