GNU find(和其他人?)有一个-true测试以及正常的-name,-mode,-user等等。从手册页:
-true 始终为真。
每次我看到手册页时,我都会注意到这一点,并想知道它什么时候有用。所以,给我一些什么时候有用的例子:~)
大多数情况下,命令的输出以换行符结尾。但有时不会,因此下一个 shell 提示与输出一起打印在同一行中。
例子:
root@hostname [~] # echo -n hello
helloroot@hostname [~] #
我一直觉得这很烦人。
现在,我可以在 PS1 变量的开头添加一个“\n”,但大多数情况下会打印我不需要的额外行。
是否有可能知道最后一个命令的输出是否以换行符结尾?
解决方案:(
感谢丹尼斯)
PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '
Run Code Online (Sandbox Code Playgroud) 编辑:我完全忘记了这个线程。原来我的硬盘坏了。我们不得不重新部署这台服务器以满足其他需求,所以我终于有时间更换一个坏磁盘,我们重新开始营业。
几个星期以来,我不明白为什么我无法删除这个特定的文件。作为 root 我可以,但我的 shell 脚本以不同的用户身份运行。所以我去运行 ls -la 并且它不在那里。但是,如果我将其作为参数调用,它就会显示出来!果然,所有者是root,因此我无法删除。
请注意,缺少 6535 ...
[root@server]# ls -la 653*
-rw-rw-r-- 1 svn svn 24002 Mar 26 01:00 653
-rw-rw-r-- 1 svn svn 7114 Mar 26 01:01 6530
-rw-rw-r-- 1 svn svn 8653 Mar 26 01:01 6531
-rw-rw-r-- 1 svn svn 6836 Mar 26 01:01 6532
-rw-rw-r-- 1 svn svn 3308 Mar 26 01:01 6533
-rw-rw-r-- 1 svn svn 3918 Mar 26 01:01 6534
-rw-rw-r-- 1 svn svn 3237 Mar 26 01:01 6536
-rw-rw-r-- …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的脚本实现一种空运行的机制,并面临当命令作为参数传递给函数并导致意外行为时引号被剥离的问题。
dry_run () {
echo "$@"
#printf '%q ' "$@"
if [ "$DRY_RUN" ]; then
return 0
fi
"$@"
}
email_admin() {
echo " Emailing admin"
dry_run su - $target_username -c "cd $GIT_WORK_TREE && git log -1 -p|mail -s '$mail_subject' $admin_email"
echo " Emailed"
}
Run Code Online (Sandbox Code Playgroud)
输出是:
su - webuser1 -c cd /home/webuser1/public_html && git log -1 -p|mail -s 'Git deployment on webuser1' user@domain.com
Run Code Online (Sandbox Code Playgroud)
预期的:
su - webuser1 -c "cd /home/webuser1/public_html && git log -1 -p|mail -s 'Git deployment on webuser1' …Run Code Online (Sandbox Code Playgroud) 我使用 telnet 命令来检查 MySQL 端口是否正在响应。
telnet 10.10.10.24 3306
Run Code Online (Sandbox Code Playgroud)
我使用 ctrl 字符断开连接。这按预期工作。如何在 shell 脚本中使用此命令?
我知道cat可以连接文件,但我需要连接文件和流的混合并将结果通过管道传输到另一个进程。
为了使问题更具体,我想将它cat abc.sql与gzip -dc xyz.sql.gzand连接在一起,并将cat qvf.sql其作为单个流通过管道传输到mysql.
实现这一目标的最佳方法是什么?
我希望直接从 shell 将输入字符串编码为 base32 编码。我希望在 ubuntu 中做到这一点,但我想味道在这里并不特别重要。
是否有任何现有的 linux/unix 工具可以简单地执行此操作?
类似的东西:
-bash-3.2$ echo -n 'hello' | base32
Run Code Online (Sandbox Code Playgroud) 我创建了一个符号链接:
ln -s /tmp/folder1 /tmp/folder2
然后我去 /tmp/folder2 并运行pwd:
$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part
Run Code Online (Sandbox Code Playgroud)
为什么pwdwithsudo给了原目录?我正在编写一个 bash 脚本,需要当前目录的绝对路径。使用 sudo 我似乎无法获得原始目录。
我想显示所有目录,不包含具有特定文件结尾的文件。因此我尝试使用以下代码:
find . -type d \! -exec test -e '{}/*.ENDING' \; -print
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想显示所有不包含结尾的文件的目录.ENDING,但这不起作用。
我的错误在哪里?
最近,命令行工具倾向于在其日志输出中使用花哨的 ANSI 颜色(例如,NPM 和许多基于 nodejs 的工具、rvm、docker 和其他一些“现代”工具)。
这使得在屏幕上阅读 (*) 变得很好,但当您想将输出通过管道传输到日志文件或通过不能很好地处理 ANSI 的传输(如各种远程执行工具和基于 Web 的监控解决方案)时,就不那么好了。许多更成熟的工具至少可以检测输出何时不是 TTY 并禁用颜色,但不能使用那些新奇的“用户友好”CLI - 这让我尝试通过管道摆脱 ANSI 颜色通过另一个过程输出。
对输出进行 sed 处理s/\x1B\[[0-9]*\w//g似乎可以完成工作,但是有没有更简洁的方法然后只需将正则表达式复制粘贴到我的所有脚本中?
(*) 至少直到该工具尝试在您的深色背景终端上以深红色显示错误为止。