交互式sh
shell 会话:
$ sh
$ timeout 1 yes | sed -n s/a/b/p ; echo $?
Terminated
143
$
非交互式脚本通过sh -c
:
$ sh -c 'timeout 1 yes | sed -n s/a/b/p ; echo $?'
0
$
为什么这两个示例会产生不同的退出代码?
交互式sh
shell 会话:
$ sh
$ timeout 1 yes | sed -n s/a/b/p ; echo $?
Terminated
143
$
非交互式脚本通过sh -c
:
$ sh -c 'timeout 1 yes | sed -n s/a/b/p ; echo $?'
0
$
为什么这两个示例会产生不同的退出代码?
一些例子:
/media/$USER/<device-id>
,我的文件浏览器会自动在设备下列出安装点。/tmp
例如,文件浏览器也不会列出位于 中的挂载点。那么挂载点自动出现在设备下的文件浏览器中的条件是什么?由于 PCManFM 和 Nautilus 的行为似乎完全相同,我相信这可能有一般规则?我可以“强制”将挂载点(例如,隐藏文件夹或在 中/tmp
)显示在设备下吗?
当进入子 shell 时,不被忽略的陷阱应设置为默认操作
来源:https ://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_28
显然,这对于我从 shell 调用的外部程序也是如此。trap "" SIGNAL
用于捕获(忽略)该信号。但trap action SIGNAL
不调用action
,不做任何事情,信号处理似乎设置为其原始默认值。
这种行为在哪里定义?
我想使用 statvfs 的返回值来获取文件系统的总大小和空闲大小。
unsigned long f_bsize; /* Filesystem block size */
unsigned long f_frsize; /* Fragment size */
fsblkcnt_t f_blocks; /* Size of fs in f_frsize units */
fsblkcnt_t f_bfree; /* Number of free blocks */
...
来源:https ://man7.org/linux/man-pages/man3/statvfs.3.html
因此,要获得文件系统的总大小,我似乎想要f_blocks * f_frsize
,因为评论f_blocks
说它是“以单位为f_frsize
单位”的大小。但是,f_bfree
是空闲块的数量。所以对于免费的文件系统大小,我必须使用f_bsize
?还是f_frsize
再来一次?
我能以某种方式找到更多关于 GNU coreutils 命令开发过程的历史吗?例如,have su
and runuser
(它提供了一种类似的功能,但被决定分成两个命令)总是共存的还是一个先于另一个?我真的不知道从哪里开始寻找。info runuser
在我的 Ubuntu 18.04 上有
2014 年 7 月
在页面的底部。我想这个日期与info
页面的编写或修改时间有关,因为runuser
它本身当然必须要老得多。所以那里或man
页面中没有运气。链接的 GNU 网站对我来说显得杂乱无章,但也许我只是无法正确导航它。
我只选择su
和runuser
作为例子。我对所有 GNU coreutils 开发都感兴趣。
我应该从哪里开始寻找?什么是好资源?文档甚至存在那么久吗?
如果我stat
用来显示 mtime,我会得到一个以毫秒为单位的日期:
$ stat -c '%y' test.log
2019-07-04 14:32:10.730059167 +0200
但是,如果我想显示 Epoch 时间戳,我将不再获得毫秒数:
$ stat -c '%Y' test.log
1562243530
我是否遗漏了一些东西,或者我必须从两个输出中将它修补在一起?
引用来自davfs2.conf
for的联机帮助页mount.davfs
:
有一个系统范围的配置文件 /etc/davfs2/davfs2.conf 和用户配置文件 ~/.davfs2/davfs2.conf。当 root 调用 mount.davfs 时,仅读取系统范围的配置文件。普通用户调用时,还会额外读取用户配置文件。
如果我打电话mount.davfs
给sudo
喜欢
sudo mount -t davfs ...
这仍然算作“由普通用户调用”并因此阅读我的~/.davfs2/davfs2.conf
?或者是否sudo
使这个调用“由root调用”并且~/.davfs2/davfs2.conf
将被忽略?
已经有一些关于如何下载 GitHub 存储库的 ZIP 文件的问题的答案,但如果存储库是私有的,它们就不起作用。
我知道它应该以wget
某种方式工作,因为它确实适用于curl
:
curl -u <USER> -L -o <FILENAME> https://github.com/<USER>/<REPO>/archive/master.zip
上面一行会询问<USER>
's 的密码,下载 master 分支 ZIP 文件并保存为<FILENAME>
. 但是,wget
等效项不起作用:
wget --user=<USER> --ask-password --output-document=<FILENAME> https://github.com/<USER>/<REPO>/archive/master.zip
结果是ERROR 404: Not Found.
假设,我有以下 bash 脚本:
#!/bin/bash
sudo command1
command2
sudo command3
我不想以command2
root 身份运行,所以我不会使用sudo
. 因此,一旦我执行脚本,就会sudo command1
询问我的密码。不幸的是,command2
大约需要2个小时才能完成。所以 sudo 凭据时间戳超时,当脚本到达时sudo command3
,我再次提示输入密码。
我不想完全永久禁用 sudo 凭据时间戳超时,例如https://superuser.com/a/149740中所述。我只想暂时禁用超时,有效地保留这个 bash 会话的凭据,直到它结束。
我正在使用smaller-vt-font()
并larger-vt-font()
快速更改字体大小。但是,字体大小更改的步骤太大,我希望它们更平滑,以便生成的字体大小更接近默认字体大小。
在做了一些研究之后,我想我必须重新定义“不可读”、“小”、“小”、“中”、“大”和“巨大”的字体大小。有这个特定的问题描述了这个问题。但是,terminus-12
,terminus-14
等等不起作用,因为xlsfonts
没有为我列出那些位图字体别名:
$ xlsfonts
-misc-fixed-medium-r-semicondensed--0-0-75-75-c-0-iso8859-1
-misc-fixed-medium-r-semicondensed--13-100-100-100-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
6x13
cursor
fixed
目前,我的.Xresources
样子是这样的:
XTerm*faceName: DejaVu Sans Mono
XTerm*faceSize: 12
XTerm.vt100.translations: #override \n\
Ctrl <Key> minus: smaller-vt-font() \n\
Ctrl <Key> plus: larger-vt-font()
我需要添加什么,例如将“不可读”、“小”、“小”、“中”、“大”和“大”的大小设置为 9、10、11、12、13 和 14 ?
我不是在寻找该问题的变通方法或解决方案。我很好,它在bash
. 我只是不明白为什么它不起作用。
我正在寻找一个深入的答案,为什么以下脚本不起作用。以前所有的互联网搜索结果,包括来自 unix.stackexchange.com 的帖子,都无法真正完全清除这一点。它与read
读取stdin
哪个不起作用有关,因为stdin
已经通过管道cat
喂食“采取”(?)?bash
示例 bash 脚本test.sh
:
echo "Please say name:"
read NAME
echo "Hello $NAME"
方法 1 调用脚本bash test.sh
:
$ bash test.sh
Please say name:
XYZ
Hello XYZ
$
方法 2 通过管道运行脚本到bash
:
$ cat test.sh | bash
Please say name:
$
所以脚本立即返回提示,无需等待输入甚至打印第二行。
我想在 XTerm 和其他应用程序中使用CTRLSHIFTCandCTRLSHIFTV进行复制和粘贴,所以我添加了
XTerm*vt100.translations: #override \
Shift Ctrl <Key> C: copy-selection(CLIPBOARD) \n\
Shift Ctrl <Key> V: insert-selection(CLIPBOARD)
到我的~/.Xresources
. 只要我不关闭 XTerm,复制和粘贴就可以正常工作。然后,所有CLIPBOARD
内容都丢失了。使用时也会出现同样的问题
XTerm*vt100.selectToClipboard: true
一旦选择了文本,它就会直接复制到CLIPBOARD
(而不是复制到PRIMARY
- 或者可能同时复制到两者?),但只有在 XTerm 运行时才可用。
所以,我读了更多关于CLIPBOARD
...但找不到明确的答案。例如,似乎存在能够同步CLIPBOARD
的工具PRIMARY
。或者使CLIPBOARD
内容持久化。或者某种CLIPBOARD
历史。但我不确定这就是我要找的东西,在这里。
例如:如果CLIPBOARD
内容并没有真正离开应用程序,并且其他程序必须“向”原始应用程序“询问”的内容CLIPBOARD
,那么这只有在该程序运行时才有可能是有道理的。CLIPBOARD
但是,即使程序已关闭,来自 Firefox 或 Leafpad的选定文本如何保持可用?Firefox/Leafpad 如何做到这一点?他们不使用外部工具,是吗?!