Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在UNIX/usr/bin/script中继承别名_Unix_Shell_Environment Variables_Scope - Fatal编程技术网

在UNIX/usr/bin/script中继承别名

在UNIX/usr/bin/script中继承别名,unix,shell,environment-variables,scope,Unix,Shell,Environment Variables,Scope,UNIX“/usr/bin/script”命令将创建shell会话的运行记录(有关更多信息,请参阅“manscript”) 但是,在脚本实例中,它似乎忘记了父shell的环境变量、别名等 以下示例演示如何在“脚本”中忽略我定义的“ll”别名: $ll zsh: command not found: ll 那么,如何让“脚本”进程从父shell继承环境设置呢 [编辑:]好的,环境变量不会被忘记。只有别名。重新获取.profile或其他有用的东西。。。但是我如何才能自动实现这一点呢?别名不是环境变

UNIX“/usr/bin/script”命令将创建shell会话的运行记录(有关更多信息,请参阅“manscript”)

但是,在脚本实例中,它似乎忘记了父shell的环境变量、别名等

以下示例演示如何在“脚本”中忽略我定义的“ll”别名:

$ll

zsh: command not found: ll
那么,如何让“脚本”进程从父shell继承环境设置呢


[编辑:]好的,环境变量不会被忘记。只有别名。重新获取.profile或其他有用的东西。。。但是我如何才能自动实现这一点呢?

别名不是环境变量。您可以从
.profile
或您设置别名的任何地方获取信息。还要看一看$SHELL环境变量


脚本
命令并不十分复杂。复制并使其按您期望的方式工作不会太困难。

正如Jon Ericson所指出的,别名不是环境的一部分。您将在脚本中找到所有环境

要获取脚本中的所有别名,可以将其保存在文件中,然后重新加载:

$ alias myls="ls -lCF" $ alias -L >/tmp/alias.zsh $ script $ . /tmp/alias.zsh $ myls $alias myls=“ls-lCF” $alias-L>/tmp/alias.zsh $script $ . /tmp/alias.zsh $myls
如果将别名放在主目录中名为
.zshrc
的文件中,它将自动加载。

在bash下启动时,它工作正常。也许在你的zsh配置中有什么东西把它弄糟了,或者它没有提供zsh的启动文件。你可以试试: 脚本-czsh


这可能会迫使它启动一个新的zsh shell,并让它为您的zsh配置文件提供源代码。

有关zsh别名的特定情况。。。如果将别名放在 .zshenv(而不是.zshrc)它应该自动代表您执行

我知道这是一个旧的线程,但有时人们阅读旧线程;>

alias foo='print FOO'
[khb@vm]~% foo
FOO
[khb@vm]~% script
Script started, file is typescript
[khb@vm]~% foo
zsh: command not found: foo
zsh: use 'exit' to exit.
[khb@vm]~% exit
Script done, file is typescript
[khb@vm]~% mv .bork .zshenv
[khb@vm]~% foo
FOO
[khb@vm]~% script
Script started, file is typescript
[khb@vm]~% foo
FOO
[khb@vm]~% 
 zsh: use 'exit' to exit.
Script done, file is typescript
[khb@vm]~% 

“脚本”不是内置的csh吗?也许ksh的版本会打开一个登录shell而不是普通的shell?+1为了教我脚本命令,我试着说“env settings”等等。如果您能够演示如何在调用/usr/bin/script时自动实现,那么就可以重新配置.profile的源代码。不想强迫用户提醒自己好吧。。。那很好。我了解如何获取手动显示的.profile或个人别名脚本。但我真正想要的是看到源代码操作自动发生,而不会对用户造成干扰。是的,虽然.zshrc确实是在登录时自动加载的,但它不是由/usr/bin/script加载的。仅仅因为我在示例中手动定义了“ll”以保持清晰,并不意味着我不知道如何建立每个用户的配置文件。。。用法:script[-a][typescript]Huh。。。切换到bashshell,定义别名,调用/usr/bin/script,并尝试使用别名。它失败了,错误消息是“zsh:command not found:ll”,所以,显然脚本使用passwd中定义的shell进行了分叉,但它不会为用户的本地配置文件提供源代码???(至少对于zsh)同意,在我将bash定义为默认shell的另一个框中,别名继承到/usr/bin/script中。所以我所看到的问题是zsh(也许还有其他人?)所独有的。。。但是bash可以正常工作。在passwd中将ksh定义为用户的默认shell也可以正常工作。这似乎是zsh中的一个缺陷,或者只是一个配置选项。嗯。 $ alias myls="ls -lCF" $ alias -L >/tmp/alias.zsh $ script $ . /tmp/alias.zsh $ myls
alias foo='print FOO'
[khb@vm]~% foo
FOO
[khb@vm]~% script
Script started, file is typescript
[khb@vm]~% foo
zsh: command not found: foo
zsh: use 'exit' to exit.
[khb@vm]~% exit
Script done, file is typescript
[khb@vm]~% mv .bork .zshenv
[khb@vm]~% foo
FOO
[khb@vm]~% script
Script started, file is typescript
[khb@vm]~% foo
FOO
[khb@vm]~% 
 zsh: use 'exit' to exit.
Script done, file is typescript
[khb@vm]~%