【问题标题】:Script command losing alias from shell脚本命令从 shell 中丢失别名
【发布时间】:2015-04-04 17:56:10
【问题描述】:

当我运行脚本命令时,它会丢失现有 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

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

但是当我执行时,脚本在我执行“exec 0

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

Script done, output file is typescript

不知道为什么调用出口和终止脚本。如果我可以让脚本将标准输入从管道移动到终端,那么它应该没问题。

【问题讨论】:

  • #!/bin/ksh 不是 bash 脚本。也许你想要#!/bin/bash 代替?
  • 我改变了它,但仍然没有运气:(
  • 但是你运行的目标脚本是 bash 脚本吗?

标签: linux bash shell scripting exec


【解决方案1】:

您可以让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&lt;&amp;-时,你正在关闭标准输入,当bash的标准输入被关闭时,它就退出了。

【讨论】:

  • 在 linux 中我没有看到问题,但在 OS X 中没有脚本的 -c 选项,知道如何让它工作吗?
  • @user1370642:根据 Mac OS X 手册页,您可以使用 script typescript bash -l,但我没有方便的 Mac 来测试它。
  • 哇!这就像一个魅力,非常感谢!
  • @user1370642:您的问题被标记为linux,这通常被认为是您正在寻找Linux解决方案的信号。
猜你喜欢
  • 2017-08-15
  • 2021-01-20
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 2013-11-03
相关资源
最近更新 更多