我正在运行这个命令:find / | grep corectrl | grep 日志
而且我收到很多权限被拒绝错误,我想将 stderr 发送到 null
给出以下/etc/fstab
挂载点:
//server/app /home/user/server/app cifs noauto,user,vers=3.11 0 0
//server/code /home/user/server/code cifs noauto,user,vers=3.11 0 0
这些要以user
特权(不带sudo
)安装。Givenuser
已登录,password
当前以交互方式提示 - 没有凭据文件,也没有硬编码的密码/etc/fstab
。
另外:所有共享都具有相同的凭据user
和相同的密码。
假设我们想在启动时挂载所有共享。分享app
:
mount ~/server/app # `user` is active
# password interactively requested
Password for user@//server/app: (press TAB for no echo)
问题是,我必须为所有共享输入相同的密码,因为它不会被缓存。
# type password once and store it in process memory
echo "Enter password for mounts:"
read -s mount_pass
[[ -z "mount_pass" ]] && echo "Password empty, exiting" && exit
# mount all shares - how to feed every mount command with given password?
mount ~/server/app
mount ~/server/code
# My attempts
echo $mount_pass | mount ~/server/app
mount ~/server/app < <(echo $mount_pass)
(原谅我肤浅的shell知识)
有没有办法将存储在命令中的密码传递$mount_pass
给mount
命令,以便它可以通过其标准输入自动读取并且不打开交互式提示?
为了验证是否安装了 docker gpg 密钥,我运行了:
sudo apt-key fingerprint 0EBFCD88 | grep "9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88"
这导致了以下输出:
Warning: apt-key output should not be parsed (stdout is not a terminal)
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
我发现了这个关于如何规避警告的 Stack Overflow 问题,但我找不到任何关于它为什么首先出现的来源?你不应该解析apt-key
输出的原因是什么?
我需要将正在运行的命令的输出重定向到带有时间戳的日志文件(因此是一个函数而不是日志文件本身),但是错误和输出都不应该显示在控制台中。以下 -
command | my_func 2> /dev/null
不管用。
就像是
command 2> logfile
有效,但我无法在第二种情况下记录时间戳。我应该怎么办?
我正在使用 lolcat 来获得 ls 的彩色输出。为此,我已将 /usr/bin/ls 复制到 /usr/bin/lsslss(以避免无限循环,因为别名不能接受 $* 或 $@)并且我添加了以下功能:
ls(){ lsslss $* | lolcat; }
到 .bashrc
问题是,当我使用 ls 时,管道一次通过管道传输每个文件,因此它显示为一个长列表,如下所示:
而不是这样的表:
要将其更改为表,我可以将输出通过管道传输到列命令中。但是当我这样做时,它会变回一个长列表(可能是因为列只对其进行格式化而不是将其更改为行)
我原本打算这样做:
ls(){ lsslss $* | columns | lolcat; }
无论如何,我想知道有没有办法管道原始输出而不是使用 | 能够将列的输出通过管道传输到lolcat?
提前致谢。抱歉,如果我的问题措辞不当或难以理解。我几乎总能找到已经问过的问题,所以我不经常发布问题。
根据我对程序 IO 的了解,有stdin
、stdout
和stderr
数据流(以及返回码)。是两个数据输出流stdout
。stderr
因此,如果我使用 bash 重定向来关闭其中一个输出流,我可以缩小将文本发送到哪个流的范围。正确的?
我正在运行 Ubuntu 18.04.1 LTS,并且遇到了 bash 重定向这个奇怪的问题。
让我解释一下这个例子。这是我的命令:
# apt-cache show php5
N: Can't select versions from package 'php5' as it is purely virtual
N: No packages found
# |
该php5
软件包在 Ubuntu 18.04 上不存在,因此apt-cache
显示错误。我会假设这个文本被发送到stderr
流,所以我试图关闭那个流:
# apt-cache show php5 2>&-
# |
这似乎验证了文本是通过 发送的stderr
。到目前为止一切都很好!但现在作为健全性检查,我尝试关闭stdout
(我现在应该看到错误文本):
# apt-cache show php5 1>&-
# |
什么!?stdout
这次我重定向了,但stderr
也没有出现?
根据互联网,我的文件描述符正确:https ://www.gnu.org/software/bash/manual/html_node/Redirections.html
我不知道这里会发生什么。
截图证明: