linux - 脚本命令从 shell 中丢失别名

标签 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

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

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

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

Script done, output file is typescript

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

最佳答案

您可以获得script执行 bash通过明确告诉 shell 来登录 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 的标准输入关闭时,它就会退出。

关于linux - 脚本命令从 shell 中丢失别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449656/

相关文章:

Linux删除脚本

linux - 通过中间机器挂载远程文件系统(sshfs)

bash - 如何使用 bash 从 wttr.in curl 结果中获取当前平均温度?

linux - ssh 命令输出以保存在 shell 脚本中的文本文件中

arrays - 如何按空行将文本文件拆分为数组?

java - 尝试每个标准 lib 选项后从 java 执行 sudo 命令

python - 仅使用 CPU 的 Ubuntu 16.04 中的 cntk 安装错误

c++ - 如何在 Eclipse CDT 中使用系统环境变量

Bash Shell 脚本 - 对话框表单变量

android - bash 脚本中的 adb 命令(将 sqlite 从 android 复制到 mac)