ошибка терминала gnome - PullRequest
       30

ошибка терминала gnome

2 голосов
/ 04 января 2012

Я пытаюсь открыть терминал, который будет выполнять код и копировать выходные файлы в папку назначения, но по какой-то причине выполняется только исполняемый файл, а команда копирования не работает, но когда я выполняю каждый из них, он работает ...

Может ли кто-нибудь помочь мне обнаружить синтаксическую ошибку, которая у меня есть?

Командная строка:

gnome-terminal --working-directory=/home/syntax_error/Desktop/uni_work/ --tab -e "./a.out './exec_me 500' ; cp output.txt /home/syntax_error/FILES/first_output.txt"

где ./exec_me - это параметр для a.out и500 - это параметр для exec_me

Спасибо =)

Ответы [ 3 ]

4 голосов
/ 04 января 2012

Похоже, gnome-terminal не использует оболочку для выполнения этих команд. Если вы хотите использовать ;, вам нужно явно вызвать его через оболочку.

Попытка:

gnome-terminal -e "bash -c 'command1 ; command2'"

Или:

echo "command1 ; command2" > tmp.sh
gnome-terminal -e "bash tmp.sh"
4 голосов
/ 04 января 2012

Я сам провёл похожий тест:

$ strace -o /tmp/gnome.out -f gnome-terminal --working-directory=/var/log --tab -e "cat *.log ; echo hello"
$ grep --color=no execve /tmp/gnome.out 
28561 execve("/usr/bin/gnome-terminal", ["gnome-terminal", "--working-directory=/var/log", "--tab", "-e", "cat *.log ; echo hello"], [/* 39 vars */]) = 0
28564 execve("/usr/lib/libvte9/gnome-pty-helper", ["gnome-pty-helper"], [/* 40 vars */]) = 0
28565 execve("/home/sarnold/bin/cat", ["cat", "*.log", ";", "echo", "hello"], [/* 40 vars */]) = -1 ENOENT (No such file or directory)
28565 execve("/usr/local/sbin/cat", ["cat", "*.log", ";", "echo", "hello"], [/* 40 vars */]) = -1 ENOENT (No such file or directory)
28565 execve("/usr/local/bin/cat", ["cat", "*.log", ";", "echo", "hello"], [/* 40 vars */]) = -1 ENOENT (No such file or directory)
28565 execve("/usr/sbin/cat", ["cat", "*.log", ";", "echo", "hello"], [/* 40 vars */]) = -1 ENOENT (No such file or directory)
28565 execve("/usr/bin/cat", ["cat", "*.log", ";", "echo", "hello"], [/* 40 vars */]) = -1 ENOENT (No such file or directory)
28565 execve("/sbin/cat", ["cat", "*.log", ";", "echo", "hello"], [/* 40 vars */]) = -1 ENOENT (No such file or directory)
28565 execve("/bin/cat", ["cat", "*.log", ";", "echo", "hello"], [/* 40 vars */] <unfinished ...>
28565 <... execve resumed> )            = 0

Это показывает, что вся командная строка передается в первый исполняемый файл, найденный в строке. (Это ... уникальный ... способ выполнения контента.)

Я предлагаю написать небольшой скрипт оболочки, который будет делать именно то, что вам нужно, и запустить этот скрипт оболочки из опции командной строки gnome-terminal -e. Примерно так:

~/bin/cp_first_output.sh:

#!/bin/sh
cd /home/syntax_error/Desktop/uni_work/
./a.out './exec_me 500'
cp output.txt /home/syntax_error/FILES/first_output.txt

chmod 755 этот файл и затем запустите:

gnome-terminal --tab -e /home/syntax_error/bin/cp_first_output.sh
0 голосов
/ 04 января 2012

Попробуйте разделить две команды, используя "\" (без кавычек)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...