Linux sh命令未调用shell脚本

Linux sh命令未调用shell脚本,linux,macos,shell,unix,sh,Linux,Macos,Shell,Unix,Sh,我已经编写了一个简单的shell脚本,在shell中添加了一些别名,它是作为学校作业的一部分执行的。以下是文件testscript.txt的内容: #!/usr/bin alias dir="ls -l" alias alerts="cat /etc/motd" PS1="What next Matt ? " 当我使用以下命令时: sh testscript.txt 由于未返回任何错误,因此该命令似乎正在运行,但别名和命令提示符变量尚未更改 我知道脚本可以正常工作,因为我尝试了以下三种选择

我已经编写了一个简单的shell脚本,在shell中添加了一些别名,它是作为学校作业的一部分执行的。以下是文件
testscript.txt
的内容:

#!/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
命令。有人建议命令更新别名和环境变量吗

以下是作业截图,您可以看到我必须满足的要求:


感谢您的时间和帮助。

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

shebang(第一行)不正确

在您的情况下,应将第一行替换为
#/bin/sh
#/bin/bash

只需在谷歌搜索“shebang”。它基本上是启动的可执行文件的绝对路径。

,这使我假设(1)
/testscript
正是他们想要的,或者(2)你误解了任务,或者(3)他们错误地制定了任务(这比你想象的要少……)。我想加上
#/usr/bin/sh
作为shebang而不是
#/usr/bin
,对我来说,解决方案中的“sh”就足够了。@Wrikken:正确的shebang是
#/bin/sh
,不一定/usr/bin/sh。后者可能适用于某些系统;前者实际上是有保证的。@KeithThompson:你说得绝对正确,这对我来说只是一个愚蠢的想法,显然是不合适的
#/usr/bin
。我被纠正了;)我猜这个练习的目的是想弄明白为什么它不起作用。。。?或者只是观察到它没有,作为进一步讨论的平台。是的,通常我会在这里或在.bashrc中设置环境变量。我贴了一张作业的截图,让你知道我的限制。-1虽然正确且有一定的相关性,但这不是OP要问的。