2016-05-18 260 views
0

内工作,我希望得到的日期时间,并作出如此命名,然后cd这个目录的目录。cd命令不bash脚本

这是我的bash脚本:

t=$(date +%F-%H%M%S) 
mkdir $t 
cd $t 

,但它不完全工作。

它创建了一个目录,但cd命令不起作用。

截图:

screenshot of command prompt

+1

是什么意思“它不工作”?它完美的作品。如果您需要任何帮助,请描述它的实际行为。 “它不工作”是无稽之谈。 –

+0

最后一行“cd”命令不起作用,运行此脚本之前是在主文件夹“〜”中,并在主文件夹中运行此脚本。 – KBKai

+1

再次。它工作得很好。除非你描述它的真实行为(错误消息等),否则没有人能够帮助你。正如我写的“它不工作”是一个垃圾* t。 –

回答

0

你正在运行一个子shell脚本。

与脚本中运行cd的问题是,它会创建该目录启动子shell。当脚本结束时,你的subshel​​l也是如此,当你运行脚本时,你又回到了你开始的地方。所以它是这样的:

  1. 启动脚本
  2. 子shell创建
  3. 创建目录
  4. 更改目录
  5. 端脚本
  6. 结束子shell
  7. 回到起点

你可以证明cd在脚本中起作用,并且当你通过留下标记来执行你的脚本时你在那个目录中。

t=$(date +%F-%H%M%S) 
mkdir $t 
cd $t 
echo "I'm here" > inside.txt 

现在当脚本结束时,您会回到开始脚本的位置。但是如果您将cd添加到目录中,并运行ls,则会看到您创建的文件。


为@Dawid Ferenczy指出,实际上你可以source这个脚本到当前的外壳,而不是运行一个子shell,如:

source test.sh 
+0

这取决于你如何执行脚本。如果你使用'source',它将使用当前的shell,脚本结束后你将进入新创建的目录。 –

+0

@DawidFerenczy看看OP的屏幕截图,他们正在用'sh'运行它# –

+0

你实际上完成了问题的回答。但是你应该使用双引号。 Hes以root身份测试shell脚本,不能太小心。 – Argonauts