#bash #xclip
#bash #xclip
Вопрос:
Эта же проблема лучше сформулирована в вопросе, опубликованном в сообществе Unix amp; Linux StackExchange.
Я программирую скрипт, который открывается при нажатии клавиши, открываю новый терминал (gnome-terminal), запускаю scrot (инструмент для создания скриншотов), сохраняю изображение со случайным именем в каталог, загружаю его в pomf.cat и копирует ссылку в буфер обмена.
Это работает нормально. Что я пытаюсь сделать сейчас, когда загрузка завершена, закройте терминал.
Мой скрипт работает следующим образом:
Ярлык (PrtScr) -> gnome-terminal -e «python path/to/script.py » -> Запустить Scrot -> Сохранить файл (и запомнить путь к файлу) -> bash script2.sh путь / к / изображению -> Загрузить в pomf.cat -> Получить ссылку -> Поместить в буфер обмена через «xclip -буфер обмена выбора»
Поскольку я хочу закрыть терминал после помещения строки в буфер обмена, я добавил это:
eval $(printf $link | xclip -selection clipboard amp;amp; sleep 1 amp;amp; pkill terminal)
Проблема в том, что в буфер обмена ничего не копируется, и терминал закрывается.
Однако без «amp;amp; sleep 1 amp;amp; pkill terminal» ссылка копируется, но терминал остается открытым.
Заранее спасибо.
//РЕДАКТИРОВАТЬ
Первый скрипт (для запуска 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")
Второй скрипт (для загрузки скриншота)
#!/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 amp;amp; 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
Комментарии:
1. Зачем вам это нужно
eval
?2. Это для выполнения команд, не так ли?
3. Не совсем, это для добавления дополнительного уровня расширения / замены, который, по-видимому, не нужен в вашем случае. На самом деле он даже используется неправильно — он пытается запустить как команду вывод команды внутри
$(...)
.4. Попробуйте просто
printf "$link" | xclip -selection clipboard amp;amp; exit
(безeval
)5. exit не закрывает его, терминал pkill уничтожает его перед получением ссылки.
Ответ №1:
Итак, в конце концов я придумал свое собственное решение.
Проблема, похоже, заключалась в самом xclip. Теперь я использую «xsel —clipboard —input», который, похоже, работает даже после прямого выхода.