2017-04-21 54 views
0

我正在使用GNU bash,版本4.3.11(1) - 发行版(x86_64-pc-linux-gnu)。如何使用set来更改shell变量?

$set | grep SHELL 
SHELL=/bin/bash 
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:verbose 

现在我想将SHELL变量的值更改为/ bin/dash。所以我试了

$set SHELL=/bin/dash 
set SHELL=/bin/dash 
$set | grep SHELL 
SHELL=/bin/bash 
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:verbose 
_=SHELL=/bin/dash 

我也试过其他几种语法。但是SHELL变量值不会改变。我有两个问题: 1.如何使用set来更改SHELL变量 2.什么是_ = SHELL =/bin/dash?

+0

试试添加'export SHELL' – luoluo

回答

0
chsh -s {shell-name} {user-name} 

使用这个,如果你想改变默认的shell冲

+0

可以设置一下吗? – drdot

+0

它设置或取消设置shell的shell选项和位置参数的值。它不会更改外壳本身。您可以查看链接以获取详细说明。 [链接](http://linuxcommand.org/lc3_man_pages/seth.html) –

2

set内置命令有许多用途,如车刀跟踪上(set -x)或关闭(set +x)的。但它也设置位置参数 - $1"[email protected]"等。这就是你有做了什么:

set SHELL=/bin/dash 
echo "$1" 

你会得到SHELL=/bin/dashecho输出。

要设置一个变量,你设置的变量 - 没有任何关键字:

SHELL=/bin/dash 

$_是前一个命令的最后一个参数的值。例如:

$ cp oldfile.c newfile.c 
$ vim $_ 
…now editing newfile.c 
$ 

这是有用的,但你也可以登陆自己因为$_变化问题,当你不指望它。

请注意,如果您错误地使用了C shell或C shell衍生产品,那么您将使用set variable=value来设置变量。

0

在Windows CMD shell或Unix csh shell中,set命令设置变量。

但是,在Bourne风格的Shell中,例如bashdash,您可以在不使用任何特定命令的情况下设置变量。设置一个环境变量可以很简单:

MY_VARIABLE=some_value 

set命令的含义确实很不一样。这在shell脚本中非常有用,而不是在交互式shell中。你可以在shell脚本中使用它来设置“位置参数”(如第一个参数,第二个参数等)。您还可以使用它来设置外壳选项,如跟踪模式(-x)或错误失败(-E)。

相关问题