Как с помощью ярлыка что-нибудь сделать?

Сообщения
222
#1
Всем привет.
Код:
$ uname -a
Linux astra 4.15.3-141-generic #astra26+ci17 SMP Fri Jul 9 09:39:31 UTC 2021 x86_64 GNU/Linux
$
Последняя, короче.
---------------------------------------------------------------------
Команда Alt+T, потом в терминале
Код:
$ echo cafebabe
$
1632069078057.png


Всё. А теперь того же эффекта я хочу достичь с помощью ярлыка. То есть ПКМ на рабочем столе -> создать -> ярлык. Вот туда нужно что-то написать и потом ткнуть на этот ярлык и чтобы такой же эффект был, как на скриншоте выше. Всего-навсего. Я думаю, я немногое прошу.
-------------------------------------------------------------------------------------------
Вот сюда
1632069324209.png

Нужно что-то написать. Но я уже устал эксперементировать с галочками, командами bash, fly-term и прочей мутью.
Всего-то навсего. Команда echo и пусть терминал не закрывается.
Заранее спасибо.
 

oko

New member
Сообщения
801
#2
to суслик
Эээ... А долго экспериментировали с мутью?
Так-то смотрим ключи fly-terminal через fly-term --help, узнаем про ключи --noclose и -e и формируем итоговую команду: fly-term --noclose -e "echo blablabla"...
Один вопрос: для каких извращенных задач такой метод вообще может понадобиться?
 
Сообщения
222
#3
to суслик
Эээ... А долго экспериментировали с мутью?
Так-то смотрим ключи fly-terminal через fly-term --help, узнаем про ключи --noclose и -e и формируем итоговую команду: fly-term --noclose -e "echo blablabla"...
Один вопрос: для каких извращенных задач такой метод вообще может понадобиться?
Я ж тебя просил вроде не беспокоиться.
 

oko

New member
Сообщения
801
#4
to суслик
Никакого беспокойства - так, легкий ликбез. В конце концов, это свободная страна, ага...
Метод нерабочий оказался в итоге? Или чувство избирательности выше, чем желание получить ответ? imho, тогда проще гуглить самостоятельно...
 

oko

New member
Сообщения
801
#6
to суслик
Дык, поделитесь, - даже любопытно стало...
 
Сообщения
222
#9
Этот способ плох тем, что порождает два процесса bash. И они два висят (командуем ps и наблюдаем два процесса bash). Один как аппендикс, а попробуй от него избавься. А вот ещё один способ (быть может, конечный), ещё ближе к задуманному. Копируем файл ~/.bashrc:
cp ~/.bashrc ~/.my_bashrc
Так, в конец файла ~/.my_bashrc дописываем нужные нам команды. Ту же echo cafebabe, к примеру. А потом пропиcываем запуск bash в свойствах ярлыка вот так:
1635151414745.png

То есть ключевой параметр --rcfile, даёт возможность подменить файл инициализации, что и делаем. По запуску наблюдаем:

Bash:
cafebabe
user@astra:~$
Запускаем команду ps:
Bash:
cafebabe
user@astra:~$ ps
  PID TTY          TIME CMD
 5522 pts/4    00:00:00 bash
 5563 pts/4    00:00:00 ps
user@astra:~$
Один bash, что и нужно. Дописывать нужные команды в конец ~/.bashrc не рекомендую потому, что они всегда будет выполняться, а это не то, что нужно. Например, когда вы просто захотите запустить терминал, Alt+T.
А твой способ не работает. Тестировать нужно прежде, чем написать что-то.
 

oko

New member
Сообщения
801
#12
to суслик
А твой способ не работает. Тестировать нужно прежде, чем написать что-то.
Я где-то писал, что это готовый способ (и просто так интересовался, сработал он или нет)? Лишь дал направление, а вы тупо скопировали - не получилось - забили и пошли лепить велосипед через переопределение переменных пользовательской среды...
А надо было всего лишь в приведенной команде поиграть с размещением кавычек (спойлер: выставить для сообщения, передаваемого echo, а не для всей конструкции с echo)...

ЗЫ По результатам нашего с вами общения какое-либо желание что-то предварительно тестировать, откровенно говоря, отсутствует. Начнете вести себя как вменяемый собеседник - будет другой коленкор, ага...
 
Последнее редактирование:
Сообщения
222
#14
to суслик

Я где-то писал, что это готовый способ (и просто так интересовался, сработал он или нет)? Лишь дал направление, а вы тупо скопировали - не получилось - забили и пошли лепить велосипед через переопределение переменных пользовательской среды...
А надо было всего лишь в приведенной команде поиграть с размещением кавычек (спойлер: выставить для сообщения, передаваемого echo, а не для всей конструкции с echo)...

ЗЫ По результатам нашего с вами общения какое-либо желание что-то предварительно тестировать, откровенно говоря, отсутствует. Начнете вести себя как вменяемый собеседник - будет другой коленкор, ага...
а... То есть лепим горбатого, а потом спираем всё на нежелание помогать? То есть желание писать не отсутствует, а желание тестировать отсутвтвует? Гениально, мля! 4-ый способ сойти за умного! Лепим всякую херь с потолка, а потом говорим, типа я в домике. Да не, просто толку от тебя как от быка молока и не шаришь ты ни хрена.
 
Сообщения
222
#15
ну пусть другие нас рассудят. Например, oko.:D
А по теории если- как можно передать команды, разделённые точкой с запятой bash-у который к тому же не запущен? Попробуй проще:
bash "touch cafebabe"
У тебя НЕ создастся файл. Это вот так надо:
bash -c "touch cafebabe"

То есть используем опцию -c. А у тебя её нет, это раз. А два, то, что после опции должна идти ОДНА команда- в данном случае ./скрипт.sh. Как вторую присовокупить (read -p "PRESS ENTER")- хрен его знает.
Bash:
$ bash "touch kk"; "touch ii"
bash: touch kk: Нет такого файла или каталога
bash: touch ii: command not found
$
$ bash -c "touch kk"; "touch ii"
bash: touch ii: command not found
$
...а, впрочем, чудеса случаются.
 

oko

New member
Сообщения
801
#16
to суслик
Второй раз (как и в теме про заголовок терминала) спрошу: вы хоть проверили совет? Работает? Нет? А что конкретно не работает? Вот это и надо писать. Потому что, primo, совет бесплатен и, secundo, дается как совет, а не modus operandi...
Так что прежде чем вякать из-за унитаза про несправедливость бытия, баны, ошибки и нехороших собеседников, постарайтесь для начала конкретно сформулировать как саму задачу (к которой призываете участников), так и результаты предложенных решений. Проверенных вами, а не кем-то еще. Потому что, @$#!!, эти решения касаются именно вашей задачи, а не чьей-то еще. Comprendo?

И еще одно. Вызывать bash из bash - это прям-таки коровья суперсила, ага. Или вы в ALCE по умолчанию на sh/zsh/etc перешли?
Так-то для всего остального есть конвейер команд. В котором, внезапно, есть операторы "&&" и "||" для определения последовательности выполнения команд. Читай, echo "blablabla" && read -p "PRESS ENTER"...
И да, конструкция, приведенная тов. Карл, вполне рабочая. А ваша проблема опять в кавычках. На что вам переменные окружения как бы наглядно намекают...
 
Сообщения
222
#17
to суслик
Второй раз (как и в теме про заголовок терминала) спрошу: вы хоть проверили совет? Работает? Нет? А что конкретно не работает? Вот это и надо писать. Потому что, primo, совет бесплатен и, secundo, дается как совет, а не modus operandi...
Так что прежде чем вякать из-за унитаза про несправедливость бытия, баны, ошибки и нехороших собеседников, постарайтесь для начала конкретно сформулировать как саму задачу (к которой призываете участников), так и результаты предложенных решений. Проверенных вами, а не кем-то еще. Потому что, @$#!!, эти решения касаются именно вашей задачи, а не чьей-то еще. Comprendo?

И еще одно. Вызывать bash из bash - это прям-таки коровья суперсила, ага. Или вы в ALCE по умолчанию на sh/zsh/etc перешли?
Так-то для всего остального есть конвейер команд. В котором, внезапно, есть операторы "&&" и "||" для определения последовательности выполнения команд. Читай, echo "blablabla" && read -p "PRESS ENTER"...
И да, конструкция, приведенная тов. Карл, вполне рабочая. А ваша проблема опять в кавычках. На что вам переменные окружения как бы наглядно намекают...
Всё уж решено. Советы свои себе в гузно засунь.
 
Последнее редактирование:
Сообщения
222
#19
Код:
$ cat ./1.sh       
echo "hello"
$ bash ./1.sh; read -p "PRESS ENTER"
hello
PRESS ENTER
$
Соглашусь, выглядит так, будто мы запускаем bash, который выполняет файл 1.sh, а потом команду read -p "PRESS ENTER", что нам и нужно. Но это не так. Файл 1.sh- да выполняется.

man bash
...
Если после обработки опций остались аргументы и не указаны опции -c или -s, первый аргумент считается именем файла, содержащего команды интерпретатора. Если bash вызван таким образом, параметр $0 устанавливается равным имени файла, а значениями позиционных параметров становятся другие аргументы. Командный интерпретатор bash читает и выполняет команды из этого файла, а затем завершает работу. Статусом выхода bash является статус выхода последней команды, выполненной в сценарии. Если ни одна команда не выполнена, статус выхода - 0.
А команда read -p "PRESS ENTER" выполняется не тем экземпляром bash, который выполняет файл 1.sh. а его родителем. Вручную запускается bash, выполняет файл 1.sh и заканчивает работу. Потом управление возвращается его родителю, который и выполняет команду read -p "PRESS ENTER":

Bash:
$ tty
/dev/pts/0
$ cat ./1.sh
echo hello
$
$ bash ./1.sh; read -p "PRESS ENTER"
hello
PRESS ENTER
Как думаешь, сколько экземпляров bash работает в этой консоли, 2? Хрен- то там, один, родитель. А один, дочерний (нужный нам), уже закончил свою работу (то есть вывод- если прописывать эту команду в ярлыке, выполнятся только то, что до точки с запятой. Строго говоря, как и здесь, собсно). Проверить очень легко, в ДРУГОЙ КОНСОЛИ.
Bash:
$ tty
/dev/pts/1
$ ps -ea | grep bash
2425 pts/0    00:00:00 bash
2445 pts/1    00:00:00 bash
$
Такие дела. В pts/0 только один bash. В нашей задаче, как ты понимаешь, никаких pts нет и никакое окно поэтому висеть не будет
 
Последнее редактирование:

oko

New member
Сообщения
801
#20
to суслик
Т.е. вам надо было создать desktop-файл, который при запуске открывает новое окно fly-term, в котором выполняется нечто заранее указанное, а потом идет возврат к консольному вводу, доступному для пользователя, от имени которого был запущен desktop-файл? А нельзя было сразу такую задачу словами написать, а не "хочу эффекта как на скриншоте, но устал возиться"?
Так-то: fly-term --noclose -e bash -c 'echo blablabla; exec bash'
Или вам вновь нужно было совсем не это, а что-то такое, чего вы не хотите и не можете объяснить?