在bash
我启动一个t/csh
shell,它更新stty erase ^H
.cshrc 中的 tty 输入 ( ),但是当exit
-ing 并返回到 bash 时,backspace密钥不再起作用。这是因为 bash 使用readline
,我需要重置擦除 ( stty erase ^?
)。
如果我理解trap
正确,似乎我可以从 t/csh 进程中捕获 t/csh 出口,并在它退出后运行命令。但是,我更喜欢在 bash 中进行捕获,理想情况下,它会检测到 shell 被调用/退出,然后运行脚本来重置其配置。
这是首选,因为我可以调用任意数量的外壳程序(例如,dash
, zsh
),这可能会无意中修改特定于 bash 的设置。与其trap
为每个 shell维护多个命令,不如为 bash 设置一个命令。
我的理解trap
正确吗?如果是这样,是否可以bash
检测到子 shell 退出然后运行脚本?
没有为非交互式/非登录 shell 调用 rc 文件;例如,那些由cron运行的
(我不确定这一点,并且会依靠社区的专业知识)
非交互式shell 需要设置BASH_ENV
环境变量,这样才能将其设置为特定的 rc 文件(例如,BASH_ENV=$HOME/.bash_profile
)
我不确定是否有过多的 rc 文件可用,所以很好奇是否有我不熟悉的文件。希望找到一个满足以下条件的rc文件:
假设您有一个带有某种终端命令的文件。每行如何执行?你能把 more 的输出传送到一个eval
?
%> more ./foo.txt
Run Code Online (Sandbox Code Playgroud)
编辑:
在从评论中获得一些帮助/指导之后,我想我还应该注意,我已经有一段时间没有完成任何 shell 脚本了,所以虽然我说eval
我可能是指echo
或其他一些执行代码的方式。
如果 foo.txt 包含多行代码,但我想执行包含 的行echo 'bar bar'
,我正在寻找一种方法来做到这一点,假设一个grep
. 逻辑上类似于:
grep echo foo.txt | xargs echo
Run Code Online (Sandbox Code Playgroud)