Использование Shell

Автор dr.Faust, 3 июня 2010, 19:57

0 Пользователи и 1 гость просматривают эту тему.

dr.Faust

Очень простой макрос:
Sub hk
Shell ("echo 'тест' > /tmp/TmpIntFl")
End Sub

Не работает!

Точнее не работает перенаправление вывода в файл...
Сама команда выполняется, но файл вывода не создаётся даже. Из консоли всё пучком.
Есть идеи?
Свобода информации - свобода личности!

Yakov

Наверное, терминала не хватает...
Shell ("xterm echo 'тест' > /tmp/TmpIntFl")

dr.Faust

Не - дело  не в этом. Я пробовал и так и вот так: "x-terminal-emulator -e echo 'тест' > /tmp/TmpIntFl"
Да и команда выполняется... это видно если заюзать там mount/umount например.
Свобода информации - свобода личности!

convas

Срабатывает, если строку
echo 'тест' > /tmp/TmpIntFl
поместить в файл test
и выполнить
Shell ("bash test")

dr.Faust

Я знаю.
Почему так не срабатывает?!
Свобода информации - свобода личности!

convas

Shell не может выполнять команды консоли.

dr.Faust

Цитата: convas от  4 июня 2010, 01:45
Shell не может выполнять команды консоли.
Хм...
А какая разница? Как отличить что команда консоли, а что может shell.
Почему не выполняется "x-terminal-emulator -e echo 'тест' > /tmp/TmpIntFl" я ведь скармливаю её терминалу?
Свобода информации - свобода личности!

N2H4

#7
Цитата: convas от  4 июня 2010, 01:30
Срабатывает ... Shell ("bash test")
И так

Shell ("x-terminal-emulator -e ""echo 'тест' > /tmp/TmpIntFl""")

тоже работает...

Причина редактирования: замена ~ на /tmp

Рыбка Рио

Может быть, оператор Shell неправильно обрабатывает символ ">" ?

Кстати, см.:
Other Functions (OpenOffice.org Runtime Library) — OpenOffice.org Wiki

OpenOffice.org Forum :: [SOLVED]Execute an external aplication

Кстати, команды можно и так писать ((но всё равно у меня почему-то ни один из вариантов (в т.ч. N2H2) не работает, Ubuntu 10.04)):
Shell ("x-terminal-emulator",1,  "-e gedit", true)
ubuntu 12.04 + LibO3.6.0

N2H4

#9
А у меня работает как первоначальная команда Shell ("x-terminal-emulator -e ""echo 'тест' > /tmp/TmpIntFl"""), так и Shell ("x-terminal-emulator",1,  "-e  ""ls /home/* > /tmp/TmpIntFl""", true)
InfraLinux 8.04, OOo 3.1.1 Pro.

Цитата: Трио от  4 июня 2010, 07:56
...в т.ч. N2H2...
Непонятно, что этим хотел сказать автор...

convas

#10
Команду "echo 'тест' > /tmp/TmpIntFl" может выполнить только bash.

x-terminal-emulator - отдельная программа, эмулирующая работу bash, и имеющая командную строку, в которой можно (или нельзя) передать  собственно команду для выполнения.

Можно самому написать подобную программу, при желании.

Кстати, не выполнится и
shell("echo 123")

Но можно запустить из Shell консоль (терминал) и ...  (у меня GNOME)
Shell ("gnome-terminal ",1, "echo 'тест' ; read")
или
Shell ("xterm")

dr.Faust

Цитата: Трио от  4 июня 2010, 06:56Может быть, оператор Shell неправильно обрабатывает символ ">" ?
Первое, что пришло в голову и я до сих пор уверен что это так...
Свобода информации - свобода личности!

Рыбка Рио

dr.Faust, там - OpenOffice.org Forum :: [SOLVED]Execute an external aplication - тоже говорится, что команда Shell не работает если нужно вывести отчёт в файл. (Хотя почему-то у N2H4 работает (?), хотя canvas говорит, что вообще не должно работать (?)) И там в конце предложен другой способ, может он сработает?
ubuntu 12.04 + LibO3.6.0

dr.Faust

Да, я знаю так же и про механизм сервиса com.sun.star.system.SystemShellExecute (Интересно что функция Shell основана по-видимому не на нём), но у него своих проблем хватает.

Мысли крутятся о том, нельзя ли вывести данные прямо в поток...
Свобода информации - свобода личности!

convas

#14
Shell (да и ShellExecute) первым аргументом требуют программу.

Чтобы выполнить команду "echo 'тест' > /tmp/TmpIntFl" нужно, чтобы Shell выглядел так:

Shell("bash echo 'тест' > /tmp/TmpIntFl")  - ???

Но bash не может иметь такой командной строки.