Bash重定向帮助

时间:2010-10-16 01:40:11

标签: bash

我遇到一个小问题,正在运行一个非常简单的bash脚本。

正在运作的部分:

qstat -f $queuenum | grep -Po '(?<=PBS_O_WORKDIR=).*(?=,)' 

将目录输出到屏幕(例如):

  

/短路/ H72 /二氧化硅/缺陷/ 2〜999/3-力/ FORCES_364

我想要做的就是将目录更改为此文件夹。在上面命令的末尾添加“| cd”不起作用,我也无法弄清楚如何使用$(())标记。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

cd `qstat -f $queuenum | grep -Po '(?<=PBS_O_WORKDIR=).*(?=,)' `

答案 1 :(得分:1)

调用您的脚本会创建一个新的bash shell

脚本结束时会销毁此shell。

如果您使用exec <scriptname>来运行脚本,则新的bash shell将替换当前的shell。因此,如果您在脚本末尾添加命令bash,您将得到您想要的,但不是相同的bash shell。

答案 2 :(得分:0)

您应该使用:

cd "$(qstat -f $queuenum | grep -Po '(?<=PBS_O_WORKDIR=).*(?=,)' )"

您正在尝试通过使用以下两种语法之一来实现命令替换:

$(command)

或像这样使用反引号:

`command` 

第一种方法是首选方式,因为它允许嵌套命令替换,例如:

foo=$(command1 | command2 $(command3))

如果命令替换的结果是带空格的字符串,你应该用双引号括起整个命令替换来保护你。

相关问题