2012-01-04 113 views
2

我想打开一个终端,将执行代码并将输出文件复制到目标文件夹,但由于某些原因只有可执行文件正在运行,并且复制命令不起作用,但是当我单独执行时它的工作原理...GNOME终端错误

任何人都可以帮助我检测到我有的语法错误吗?

的命令行是:

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

由于一个参数=)

+1

我很好奇,如果'; cp输出...内容也被传递给'.a.out'作为命令行参数;尝试使用'strace -o /tmp/out-f gnome-terminal -...'运行该命令并检查'/ tmp/out'文件中是否存在'execve(2)'调用。 – sarnold 2012-01-04 00:31:06

+0

@sarnold execve(2)在文件中不存在...任何想法? – 2012-01-04 00:35:54

回答

4

我跑了类似的测试自己:

$ 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 

这表明整个命令行被传递到第一在字符串中找到可执行文件。 (这是一种独特的执行内容的方式。)

我建议编写一个小型shell脚本,它完全符合您的需求,并从gnome-terminal-e命令行选项运行该shell脚本。事情是这样的:

~/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

尝试分开的两个命令通过使用“\”(不含引号)

+0

已经试过了,但没用。 – 2012-01-04 00:38:21

4

它看起来像gnome-terminal不使用shell来执行这些命令。如果你想使用;,你需要明确地通过shell调用它。

尝试:

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

或者:

echo "command1 ; command2" > tmp.sh 
gnome-terminal -e "bash tmp.sh" 
+0

第一种方法不起作用相同的结果,会执行第二种 – 2012-01-04 01:06:29