当我在 Cygwin 终端中时,我可以轻松地使用“source”命令。
例如,假设我有一个名为“my_aliases.sh”的文件,其中包含以下内容
#!/bin/bash -f
alias clear='cmd /c cls'
#unalias clear
然后在 Cygwin 终端上,我可以输入
$source my_aliases.sh
它运行良好,每当我输入“clear”时,我都能看到它运行正常。
但我不知道为什么在另一个 shell 脚本中做同样的事情,并且调用那个 shell 脚本不起作用。
例如,假设我有一个名为“run_alias.sh”的文件,其中包含以下内容:
#!/bin/bash -f
#
a=`source my_aliases.sh`
b=`ls -ltr`
echo $a
echo $b
当我尝试运行我的文件时
$ ./run_alias.sh
它只是什么都不做。例如,我可以看到命令 (b) 发生了,但命令 (a) 没有任何反应。
但是在我运行“run_alias.sh”并输入“clear”后,我得到以下错误:
$ clear
bash: clear: command not found
我什至尝试如下更改 run_alias.sh:
#!/bin/bash -f
echo `source my_aliases.sh`
但现在当运行 run_alias.sh 并键入 clear 时,我得到完全相同的错误消息!!!
知道如何从 Cygwin 中的其他一些 shell 脚本调用“source”命令吗?
最佳答案
子进程不能改变其父进程的环境。
当您执行 run_alias.sh 脚本时,您会启动一个新的 bash 进程,该进程会获取您的别名文件。然后脚本结束,bash 进程终止,并带走修改后的环境。
如果您希望您的别名自动可用,请从您的 $HOME/.bashrc 文件中获取它。
关于Cygwin 中的 bash shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17176385/