我--在compgen命令中看到使用过。
例如:
compgen -W "foo bar baz" -- b
Run Code Online (Sandbox Code Playgroud)
里面的意思是什么--?
我经常在 tmux 中得到十多个窗口。后来,我关闭了一些较旧的。有没有办法将窗口 15 重新编号到窗口 3(不再存在)?或者把pack它们全部重新排列起来,这样就没有空槽了?我想这样做是因为很难跳转到更高编号的窗口,因为你不能这样做Ctrl+B, 15。我必须使用Ctrl+B, w列出窗口,然后键入与我要打开的窗口对应的字母。
我知道我可以交换窗户。例如,我可以创建一个新窗口 ( Ctrl+B, c),它将在空槽 3 中打开。然后我可以swapw打开窗口 15 和窗口 3,然后关闭窗口 15。显然,这是一种乏味的方法。
在 tmux 中如何管理多个窗口?
我想创建一个“ /dev/null”目录(或“黑洞”目录),这样写入它的任何文件都不会真正写入,而只是消失。
我有一个将大型临时文件写入目录的应用程序。我无法控制文件的名称,而且我并不真正关心这些文件的内容。我可以编写一个脚本来定期破坏这些文件,但这些文件会很快写出并填满我的磁盘。我正在寻找更聪明的东西。我希望应用程序“认为”它正在写出这些文件,而实际上,写的内容只是在另一端被丢弃。
另请参阅这个旧的相关线程。
我知道您可以创建一个文件描述符并将输出重定向到它。例如
exec 3<> /tmp/foo # open fd 3.
echo a >&3 # write to it
exec 3>&- # close fd 3.
Run Code Online (Sandbox Code Playgroud)
但是你可以在没有文件描述符的情况下做同样的事情:
FILE=/tmp/foo
echo a > "$FILE"
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个很好的例子,说明何时必须使用额外的文件描述符。
我的 Bash Prompt 当前正在使用以下顺序设置 xterm 标题栏:
PS1='\033]0;\u@\h>\w\007'
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以在标题栏中显示当前命令。例如,如果我使用 拖尾文件tail -f foo.log,我希望我的标题栏显示tail -f foo.log.
我使用Ctrl+B命令前缀 in tmux,但这与Ctrl+Bin冲突less,后者用于向上滚动文件。
我怎样才能让它发挥作用?我必须在 中设置不同的命令前缀tmux吗?如果可以避免的话,我真的不想学习新的键绑定。
有没有一种快速的方法来检查 gzip 压缩的文件是否为空,或者我必须先解压缩它吗?
例子:
$ touch foo
$ if [ -s foo ]; then echo not empty; fi
$ gzip foo
$ if [ -s foo.gz ]; then echo not empty; fi
not empty
$ wc -l foo.gz
1 foo.gz
Run Code Online (Sandbox Code Playgroud) GREEN="\e[1;32m"
RED="\e[1;31m"
NONE="\e[m"
get_exit_status(){
es=$?
if [ $es -eq 0 ]
then
echo -e "${GREEN}${es}${NONE}"
else
echo -e "${RED}${es}${NONE}"
fi
}
get_path(){
#dummy function
echo "PATH"
}
PROMPT_COMMAND='exitStatus=$(get_exit_status)'
Run Code Online (Sandbox Code Playgroud)
下面给出了正确的 exitStatus 但颜色变量没有扩展:
PS1='${RED}\h $(get_path) ${exitStatus}${NONE} '
Run Code Online (Sandbox Code Playgroud)
但是,下面的一个给了我颜色,但退出状态没有更新:
PS1="${RED}\h $(get_path) ${exitStatus}${NONE} "
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?我该如何解决这个问题,以便 exitStatus 和颜色都能正常工作?
我已经为不同的架构构建了我的应用程序,并希望创建一个“动态符号链接”,它根据变量将我带到正确的版本。
如果我当前登录的机器是 x86,那么符号链接应该将我带到那个版本。
我想做的一个嘲笑的例子:
$ uname -i
x86_64
$ ls -ltr
lrwxr-xr-x 1 dogbane gg 4 Feb 16 15:40 mylink -> @sys/
drwxrwxr-x 2 dogbane gg 2048 Feb 16 15:40 x86_64/
drwxrwxr-x 2 dogbane gg 2048 Feb 16 15:40 i386/
$ cd mylink
$ pwd -P
~/x86_64
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我知道我可以使用cd $(uname -i),但想要更简单的东西。
升级到Bash4,发现不匹配正则表达式:
$ echo $BASH_VERSION
4.1.2(1)-release
$ [[ "20110228" =~ "^[0-9]{8}$" ]] && echo matches
Run Code Online (Sandbox Code Playgroud)
但是 Bash 3.0 是:
$ echo $BASH_VERSION
3.00.16(1)-release
$ [[ "20110228" =~ "^[0-9]{8}$" ]] && echo matches
matches
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我没有正确安装它吗?
我想在cal命令的输出中突出显示今天的日期。什么是最好的方法?
这是我到目前为止:
cal -m | grep -C6 --color "$(date +%e)"
Run Code Online (Sandbox Code Playgroud)
但它不适用于所有情况,例如,当日期只有一位数时。我还希望突出显示在我显示一年的日历时起作用。
我有一个大脚本,它将文件作为输入并用它做各种事情。这是一个测试版本:
echo "cat: $1"
cat $1
echo "grep: $1"
grep hello $1
echo "sed: $1"
sed 's/hello/world/g' $1
Run Code Online (Sandbox Code Playgroud)
我希望我的脚本可以使用进程替换,但只有第一个命令 ( cat) 有效,而其余的则无效。我认为这是因为它是一个管道。
$ myscript.sh <(echo hello)
Run Code Online (Sandbox Code Playgroud)
应该打印:
cat: /dev/fd/63
hello
grep: /dev/fd/63
hello
sed: /dev/fd/63
world
Run Code Online (Sandbox Code Playgroud)
这可能吗?
bash ×6
command-line ×2
prompt ×2
shell ×2
tmux ×2
cal ×1
date ×1
directory ×1
filesystems ×1
gzip ×1
highlighting ×1
symlink ×1
syntax ×1
utilities ×1
window-title ×1
xterm ×1