printf
bash中的echo
函数和函数有什么区别?
具体来说,运行:
echo "blah" >/dev/udp/localhost/8125
Run Code Online (Sandbox Code Playgroud)
没有将“blah”命令发送到侦听 8125 的服务器,而
printf "blah" >/dev/udp/localhost/8125
Run Code Online (Sandbox Code Playgroud)
发送了数据。printf 在输出结束时发送额外的 EOF 吗?
我正在尝试在 Centos 6 系统上创建一个新用户。
首先,我做
useradd kevin
Run Code Online (Sandbox Code Playgroud)
然后,我尝试以该用户身份运行命令
su - kevin
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
[kevin@gazelle ~]$
Run Code Online (Sandbox Code Playgroud)
而我作为那个用户也做不了多少。
权限/dev/null
如下:
-rwxr-xr-x 1 root root 9 Jul 25 17:07 null
Run Code Online (Sandbox Code Playgroud)
与我的 Mac 上的大致相同,
crw-rw-rw- 1 root wheel 3, 2 Jul 25 14:08 null
Run Code Online (Sandbox Code Playgroud)
我有可能碰过 dev,但真的不太可能。
作为 root 用户,我尝试添加kevin
到root
组中:
usermod -a -G root kevin …
Run Code Online (Sandbox Code Playgroud) 是否可以使用键盘快捷键使窗口占据屏幕的左半部分或右半部分?我正在使用 Ubuntu 的修改版本。在 Mac 上,我只使用 Divvy,但我不确定是否有 Linux 工具可以做同样的事情。
我喜欢 Zsh 的 Tab 补全,但是当只有一个可能的选项时它令人沮丧,我必须两次 Tab 才能完成文件名。
例如,如果这是目录中的文件列表:
- a.txt
- b.txt
- x.txt
Run Code Online (Sandbox Code Playgroud)
然后我输入cat x<TAB>
ZSH,我在提示符下得到这个:
$ cat x
x.txt
Run Code Online (Sandbox Code Playgroud)
我必须再次 TAB 才能获得值。我该怎么做才能让 ZSH 仅使用第一个选项卡完成文件名?
这是我的 setopt:
alwaystoend
autocd
autonamedirs
autopushd
cdablevars
completeinword
correctall
extendedhistory
noflowcontrol
histexpiredupsfirst
histignoredups
histignorespace
histverify
incappendhistory
interactive
longlistjobs
menucomplete
monitor
promptsubst
pushdignoredups
sharehistory
shinstdin
zle
Run Code Online (Sandbox Code Playgroud) 有没有办法在precmd
zsh的函数中设置变量,然后在提示中echo它们?
就像是
function precmd {
GREETING='Hi Kevin!';
}
PROMPT="$GREETING";
Run Code Online (Sandbox Code Playgroud) 假设我想在运行命令的各种咒语之前重复相同的环境变量字符串
if [[ some_thing ]]; then
TZ=GMT LC_ALL=C LONG_ENV_VAR=foo my_command
elif [[ some_other_thing ]]; then
TZ=GMT LC_ALL=C LONG_ENV_VAR=foo my_command --with-arg
else
TZ=GMT LC_ALL=C LONG_ENV_VAR=foo my_command --with-other-arg
fi
Run Code Online (Sandbox Code Playgroud)
有没有办法将它们结合起来?一些选项
通过设置它们 export
export TZ=GMT
export LC_ALL=C
export LONG_ENV_VAR=foo
if [[ ]] # ...
Run Code Online (Sandbox Code Playgroud)
这有效,但我宁愿不让它们继续在环境中设置。
尝试创建一个可变变量!
local cmd_args="TZ=GMT LC_ALL=C LONG_ENV_VAR=foo"
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试通过以下方式运行它时:
$cmd_args my_command
Run Code Online (Sandbox Code Playgroud)
我得到了TZ=GMT: command not found
。
每次都把它们都列出来。
我也为此尝试过谷歌搜索,但“环境变量变量”不是最容易搜索的术语,我没有找到任何地方。我在 #2 中尝试做的事情有解决方法吗?还是我坚持使用 #1 的某个版本并在之后取消设置变量?
有没有办法轻松确定我是否可以读取或写入给定文件,或者是否需要使用“sudo”来执行此操作?不必要地以 sudo 身份运行命令意味着这些文件是以 root 用户作为所有者创建的,这是不可取的。
就像是
is_readable /path/to/file
if [[ $? == 0 ]]; then
do_command /path/to/file;
else
sudo do_command /path/to/file;
fi
Run Code Online (Sandbox Code Playgroud)