Cygwin 中的 bash shell

标签 bash shell cygwin

当我在 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/

相关文章:

git - 使用 Cygwin 或 msysGit 版本的 Git,或同时使用两者?

bash - 给定 IP 地址和网络掩码,如何使用 bash 计算子网范围?

linux - 从后台进程读取命名管道

bash - 使用Awk或Sed在特定行的末尾添加语句

python - 如何在 python 中将 SHGetFileInfo 与 SHGFI_PIDL 一起使用

bash - 将 Cygwin/bash 结果输出到文本文件

linux - Bash:无法在 Linux 上启动使用 make 创建的程序

database - postgres 实用程序脚本中的参数

c - 转义“在 system() 内部调用以用于 echo 命令

linux - $ 导出 CXX g++ 错误 :bash: export: `g++' : not a valid identifier