我正在使用GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-gnu)。
$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 :(得分:2)
set
内置命令有多种用途,例如开启跟踪(set -x
)或关闭(set +x
)。但它也设置了位置参数 - $1
,"$@"
等等。这就是您所做的:
set SHELL=/bin/dash
echo "$1"
您将SHELL=/bin/dash
作为echo
的输出。
要设置变量,请设置变量 - 不带任何关键字:
SHELL=/bin/dash
$_
是上一个命令的最后一个参数的值。例如:
$ cp oldfile.c newfile.c
$ vim $_
…now editing newfile.c
$
这可能很有用,但您也可以解决问题,因为$_
会在您没有预料到的情况下发生变化。
请注意,如果您被误导为使用C shell或C shell派生,那么您可以使用set variable=value
来设置变量。
答案 1 :(得分:0)
chsh -s {shell-name} {user-name}
如果要将默认shell更改为破折号
,请使用此选项答案 2 :(得分:0)
在Windows CMD
shell或Unix csh
shell中,set
命令设置变量。
但是,在bash
和dash
等Bourne样式的shell中,您可以在没有任何特定命令的情况下设置变量。设置环境变量可以简单如下:
MY_VARIABLE=some_value
set
命令确实意味着完全不同的东西。它主要用于shell脚本,而不是交互式shell。您可以在shell脚本中使用它来设置"位置参数" (如第一个参数,第二个参数等)。您还可以使用它来设置shell选项,如跟踪模式(-x
)或错误导致错误(-E
)。