小编Kev*_*rke的帖子

bash中printf和echo的区别

printfbash中的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 吗?

bash

59
推荐指数
5
解决办法
13万
查看次数

-bash: /dev/null: 权限被拒绝

我正在尝试在 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 用户,我尝试添加kevinroot组中:

usermod -a -G root kevin …
Run Code Online (Sandbox Code Playgroud)

permissions

40
推荐指数
3
解决办法
9万
查看次数

是否有使窗口占据一半屏幕的键盘快捷键?

是否可以使用键盘快捷键使窗口占据屏幕的左半部分或右半部分?我正在使用 Ubuntu 的修改版本。在 Mac 上,我只使用 Divvy,但我不确定是否有 Linux 工具可以做同样的事情。

gnome window

14
推荐指数
3
解决办法
1万
查看次数

ZSH 需要两个选项卡来完成文件名

我喜欢 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)

zsh autocomplete

7
推荐指数
1
解决办法
991
查看次数

在 ZSH precmd 中设置变量并在提示中引用它们

有没有办法在precmdzsh的函数中设置变量,然后在提示中echo它们?

就像是

function precmd {
   GREETING='Hi Kevin!';
}

PROMPT="$GREETING";
Run Code Online (Sandbox Code Playgroud)

prompt zsh

6
推荐指数
1
解决办法
6367
查看次数

将多个环境变量分配给单个变量并根据命令展开它们

假设我想在运行命令的各种咒语之前重复相同的环境变量字符串

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)

有没有办法将它们结合起来?一些选项

  1. 通过设置它们 export

    export TZ=GMT
    export LC_ALL=C
    export LONG_ENV_VAR=foo
    if [[ ]] # ...
    
    Run Code Online (Sandbox Code Playgroud)

    这有效,但我宁愿不让它们继续在环境中设置。

  2. 尝试创建一个可变变量!

    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

  3. 每次都把它们都列出来。

我也为此尝试过谷歌搜索,但“环境变量变量”不是最容易搜索的术语,我没有找到任何地方。我在 #2 中尝试做的事情有解决方法吗?还是我坚持使用 #1 的某个版本并在之后取消设置变量?

bash environment-variables

6
推荐指数
3
解决办法
4003
查看次数

如何检查运行命令是否需要“sudo”权限?

有没有办法轻松确定我是否可以读取或写入给定文件,或者是否需要使用“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)

permissions sudo

4
推荐指数
1
解决办法
2010
查看次数