小编Tom*_*ale的帖子

$PWD 的词源

的词源是$PWD什么?是首字母缩略词吗?

我知道有一个pwd打印工作目录的命令,但在我看来,$CWD为当前工作目录命名变量会更有意义,因为 shell 变量包含数据,而不是打印它们。

shell history pwd

9
推荐指数
1
解决办法
611
查看次数

zsh 中函数的调用上下文:相当于 bash `caller`

在 bash 中,我可以写:

caller 0
Run Code Online (Sandbox Code Playgroud)

并接收调用者上下文的:

  • 电话号码
  • 功能
  • 脚本名称

这对于调试非常有用。鉴于:

yelp () { caller 0; }
Run Code Online (Sandbox Code Playgroud)

然后我可以写yelp来看看到达了哪些代码行。

我可以实现caller 0bash如下:

echo "${BASH_LINENO[0]} ${FUNCNAME[1]} ${BASH_SOURCE[1]"
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得相同的输出caller 0zsh

shell debugging zsh function

9
推荐指数
1
解决办法
1619
查看次数

如何在登录/注销时创建/删除 $XDG_RUNTIME_DIR

今天,我惊讶地ssh发现我的运行 Arch Linux 的机器/run/user/$(id -u)并不存在。

XDG基本目录规范指出:

$XDG_RUNTIME_DIR定义相对于用户特定的非必需运行时文件和其他文件对象(例如套接字、命名管道...)应存储的基目录。该目录必须由用户拥有,并且他必须是唯一对其具有读写访问权限的人。它的 Unix 访问模式必须是0700.

目录的生命周期必须与登录的用户绑定。它必须在用户首次登录时创建,如果用户完全注销,则必须删除该目录。如果用户登录多次,他应该被指向同一个目录,并且该目录必须从他第一次登录到最后一次注销在系统上继续存在,并且在这期间不能被删除。目录中的文件不能在重新启动或完整的注销/登录周期后继续存在。

在盒子上systemd,是/run/user/$(id -u)首选位置$XDG_RUNTIME_DIR(即使需要创建?)

如果没有,创建的最佳实践是什么$XDG_RUNTIME_DIR

如何确保仅当我“完全”注销时才删除该目录?

(“完全”是否意味着登录 shell 创建的所有进程都已退出?如何检查?)

systemd tmp tmpfs xdg xdg-user-dirs

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

pacman: <filename> 存在于文件系统中

使用 安装软件包时pacman,我看到:

error: failed to commit transaction (conflicting files)
station: /usr/bin/station exists in filesystem
Run Code Online (Sandbox Code Playgroud)

pacman无论如何,我如何告诉安装软件包,覆盖现有文件?

arch-linux pacman manjaro

9
推荐指数
1
解决办法
2万
查看次数

shell:读取:区分 EOF 和换行符

读取单个字符,如何区分 null<EOF>\n?

例如:

f() { read -rn 1 -p "Enter a character: " char &&
      printf "\nYou entered '%s'\n" "$char"; }
Run Code Online (Sandbox Code Playgroud)

带有可打印字符:

$ f
Enter a character: x
You entered 'x'
Run Code Online (Sandbox Code Playgroud)

按下时Enter

$ f
Enter a character: 

You entered ''
Run Code Online (Sandbox Code Playgroud)

Ctrl+ 时D

$ f
Enter a character: ^D
You entered ''
$ 
Run Code Online (Sandbox Code Playgroud)

为什么在最后两种情况下输出相同?我如何区分它们?

在 POSIX shell 和 POSIX shell 中是否有不同的方法来做到这一点bash

shell bash posix

8
推荐指数
1
解决办法
6420
查看次数

获取当前时区为“地区/城市”

可惜timedatectl set-timezone没有更新/etc/timezone

我如何获得当前时区Region/City,例如,给定:

% timedatectl | grep zone
                       Time zone: Asia/Kuala_Lumpur (+08, +0800)
Run Code Online (Sandbox Code Playgroud)

我可以得到最后一部分:

% date +"%Z %z"
+08 +0800
Run Code Online (Sandbox Code Playgroud)

如何在Asia/Kuala_Lumpur不获得全部awk病房的情况下获得零件?

我在 Linux 上,但是还有 POSIX 方式吗?

linux date timezone

8
推荐指数
2
解决办法
6346
查看次数

`timedatectl set-timezone` 不会更新 `/etc/timezone`

我预计更改时区时timedatectl会更新,但没有:/etc/timezone

% sudo timedatectl set-timezone 'Asia/Kuala_Lumpur'
% cat /etc/timezone
Asia/Bangkok
Run Code Online (Sandbox Code Playgroud)

有没有理由不这样做?(漏洞?)

如果我手动更新/etc/timezone为 match timedatectl set-timezone,是否有我应该注意的副作用?

还有其他地方我应该考虑更改时区,例如xfce4 面板时钟吗?

linux arch-linux date timezone

8
推荐指数
1
解决办法
2万
查看次数

ntfs-3g `big_writes` 挂载选项的缺点

man ntfs-3g使big_writes挂载选项看起来像是一件好事:

   big_writes
          This option prevents fuse from splitting write buffers into 4K
          chunks, enabling big write buffers to be transferred from the
          application in a single step (up to some system limit, generally
          128K bytes).
Run Code Online (Sandbox Code Playgroud)

没有列出缺点......我什么时候想避免安装 big_writes

linux ntfs ntfs-3g

8
推荐指数
1
解决办法
4185
查看次数

从键盘发送 SIGWINCH

Unix Signals 上的维基百科页面说:

信号绞盘

所述SIGWINCH信号被发送到时,其控制终端改变其大小(一流程道康宁CH安格)。

是否可以从键盘发送 SIGWINCH?

如果是这样,如何?

terminal keyboard signals

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

/etc/timezone 有什么用?

在我的 Manjaro linux 机器上,我有一个文件/etc/timezone,其中包含:

Asia/Bangkok
Run Code Online (Sandbox Code Playgroud)

另一个 Manjaro 论坛用户也有相同的文件。该线程总体上包含有关此问题的一些现有技术。

奇怪的是timedatectl status不使用这个文件来报告Region/City. 这是初始状态:

$ timedatectl status                                          
                      Local time: Fri 2018-06-29 11:01:28 +07       
                  Universal time: Fri 2018-06-29 04:01:28 UTC    
                        RTC time: Fri 2018-06-29 04:01:28        
                       Time zone: Asia/Bangkok (+07, +0700)             
       System clock synchronized: no                          
systemd-timesyncd.service active: no                              
                 RTC in local TZ: no                            
Run Code Online (Sandbox Code Playgroud)

现在我/etc/localtime用它指向的文件内容覆盖符号链接:

$ sudo ln -f "$(realpath /etc/localtime)" /etc/localtime          
$ timedatectl status                                           
                      Local time: Fri 2018-06-29 04:04:03 UTC
                  Universal time: Fri 2018-06-29 04:04:03 UTC …
Run Code Online (Sandbox Code Playgroud)

arch-linux date timezone clock manjaro

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