2013-10-17 131 views
0

我已经编写了一个简单的shell脚本,它将一些别名添加到它作为学校作业的一部分执行的shell中。下面是该文件testscript.txt内容:sh命令不调用shell脚本

#!/usr/bin 

alias dir="ls -l" 
alias alerts="cat /etc/motd" 
PS1="What next Matt ? " 

当我使用下面的命令:

sh testscript.txt 

的命令似乎运行,因为返回任何错误,但是,别名和命令提示变量具有没有被改变。

我知道脚本正常工作,因为我曾尝试以下三种备选方案,其中所有的工作顺利:

. ./testscript.txt 
. testscript.txt 
source testscript.txt 

的任务要求我使用sh命令。任何建议让命令更新别名和环境变量?

下面是分配的截图,所以你可以看到我必须满足的要求: enter image description here

感谢您的时间和帮助。

+1

[你无法控制父外壳的环境](http://docstore.mik.ua/orelly/unix3/upt/ch24_04.htm),这导致我认为或者1)'。 。/ testscript'就是他们正在寻找的东西,或者(2)你错误地理解了这个任务,或者(3)他们错误地阐述了这个任务(这是不太常见的,你认为......)。我会添加'#!/ usr/bin/sh'作为shebang而不是'#!/ usr/bin',这对我来说已经足够'sh'了。 – Wrikken

+1

@Wrikken:正确的shebang是'#!/bin/sh',而不是(必然)'#!/ usr/bin/sh'。后者可能在某些系统上工作;前者实际上是有保证的。 –

+0

@KeithThompson:你绝对是对的,在这里我只是一个脑筋急转弯,明显不合适的'#!/ usr/bin'。我站在纠正;) – Wrikken

回答

0

您在独立脚本中设置的任何环境变量只能在该脚本中可见。相反,您需要将这些命令添加到~/.profile(或任何与您的系统相同的命令)。然后它们将在您登录到命令行控制台时执行。

+0

是的,通常我会在这里或在.bashrc中设置环境变量。我发布了作业的截图,以便您了解我的限制。 – Matt

-1

shebang(第一行)不正确。

对于您的情况,您应该将第一行替换为#!/bin/sh#!/bin/bash

只需在Google中搜索'shebang'即可。它基本上是启动的可执行文件的绝对路径。 http://en.wikipedia.org/wiki/Shebang_(Unix)

+0

-1虽然正确和适度相关,但这不是OP询问的问题。 – tripleee