脚本命令从shell中丢失别名

时间:2015-04-04 17:56:10

标签: linux bash shell scripting exec

当我运行脚本命令时,它会丢失现有shell中的所有别名,这对于使用大量别名的人来说是不希望的。所以,我试图看看我是否可以再次自动获取.profile以查看它是否有效而没有用户必须这样做。

以下是代码:

#!/bin/bash -l
rm aliaspipe
mkfifo aliaspipe
bash -c "sleep 1;echo 'source ~/.bash_profile' > aliaspipe ;echo 'alias' > aliaspipe ;echo 'exec 0<&-' > aliaspipe"&
echo "starting script for recording"
script < aliaspipe

基本上我正在创建一个命名管道并将管道作为stdin到脚本程序,尝试运行源命令然后关闭stdin从管道到终端stdin,以便我可以继续使用脚本。

但是当我执行时,脚本在我执行“exec 0&lt;&amp; - ”后退出,

bash-3.2$ exec 0<&-
bash-3.2$ exit

Script done, output file is typescript

不确定为什么要调用exit并终止脚本。如果我可以让脚本将stdin从管道移动到终端那么它应该没问题。

1 个答案:

答案 0 :(得分:2)

您可以让script执行bash登录shell,告知它明确地执行此操作。

# Gnu script (most Linux distros)
script -c "bash -l"
# BSD script (also Mac OS X)
script typescript bash -l

这将导致您的.bash_profile被采购。


顺便说一下,重定向不是堆栈。当您编写exec 0<&-时,您关闭标准输入,当bash的标准输入关闭时,它会退出。