この同じ問題は、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
なぜ 'eval'が必要ですか? – Leon
これはコマンドを実行するためのものですが、そうではありませんか? –
正確ではありませんが、あなたのケースでは必要ないと思われる拡張/置換の追加レベルを追加するためのものです。実際、それは誤って使用されています。コマンドの出力を '$(...)'の中でコマンドとして実行しようとします。 – Leon