小编Sil*_*eth的帖子

tcsh 和其他 shell 之间的 stderr 重定向不一致

我在 tcsh 中遇到重定向问题。

考虑以下命令:vi --versionvi --xxx。让我们假设这是在vi支持该--version选项的机器上。该选项--xxx无效,因此vim应通过stderr.

根据这个推理,2> /dev/null与这两个命令一起使用应该给出有效情况的输出,而无效情况则没有输出。

就是我在 bash、zsh、ksh 和 dash 中看到的。

$ vi --xxx 2> /dev/null
$ vi --version 2> /dev/null
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Oct 20 2014 16:09:17)
...
Run Code Online (Sandbox Code Playgroud)

但是,当我在 tcsh 中尝试此操作时,在这两种情况下没有输出

$ vi --xxx 2> /dev/null
$ vi --version 2> /dev/null
(there is no output here)
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我重定向stderr …

tcsh io-redirection stderr

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

检查命令是否内置于 ksh

如何检查命令是否是 的内置命令ksh

tcsh你可以使用where; 在zshbash您可以使用type -a; 在某些现代版本中,ksh您可以使用whence -av.

我想要做的是编写一个isbuiltin在任何版本ksh(包括ksh88和任何其他“旧”版本ksh)中工作的函数,其行为如下:

  1. 接受多个参数并检查每个参数是否内置
  2. 0如果所有给定的命令都是内置的,则返回(成功)
  3. 在第一个非内置命令处,停止检查,返回1(失败)并将消息打印到 stderr。

我已经有这样的工作功能zshbash使用上述命令。

这是我的目的ksh

isbuiltin() {
  if [[ "$#" -eq 0 ]]; then
    echo "Usage: isbuiltin cmd" >&2
    return 1
  fi
  for cmd in "$@"
  do
    if [[ $cmd = "builtin" ]]; then
      #Handle the …
Run Code Online (Sandbox Code Playgroud)

scripting ksh function shell-builtin

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

更改 wget 的默认权限?

我正在使用 PHP 脚本调用shell_exec并执行wget将一些文件下载到/var/www/dir/. (内部工具,因此安全性不是什么大问题)

该目录具有777权限。但是当我运行时wget,所有文件都是644默认的。理想情况下,我希望665对 group 进行组写访问www-data

如何设置wget下载文件的权限?我不想chmod -R在每次通话后都跑。

permissions wget php

6
推荐指数
1
解决办法
6647
查看次数

如何检查tcsh中的字符串是否为空

如何检查 tcsh 中的字符串是否为空?

在你吓坏之前,不,我不是在用 tcsh 编写 shell 脚本。我问是因为我想在我的 .tcshrc 文件中使用它。

具体来说,我想在 tcsh 中做这个 bash 代码的等价物:

if [[ -z $myVar ]]; then
  echo "the string is blank"
fi
Run Code Online (Sandbox Code Playgroud)

tcsh shell-script

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

何时使用命令的 XPG* 版本?

我偶尔做旧的Solaris机器其默认的版本上工作grep的非POSIX兼容的。这会导致我的 rc 文件出现问题,因为grep机器上的默认设置不支持我需要的选项。

这是我工作地点的一台机器,我不是管理员;所以我不能只安装我认为合适的更新/更好版本的命令。但是,我注意到该机器确实有合适的XPG版本grepat /usr/xpg4/bin/grep

显然,我可以在我的 rc 文件中解决这个问题(对于 Solaris):

alias grep='/usr/xpg4/bin/grep'
Run Code Online (Sandbox Code Playgroud)

但是那些不需要的机器呢?我的目标是为每个 shell 拥有一个单独的 rc 文件,我可以将其放入任何类 Unix 系统并使其正常工作。

这让我想到...

  1. 有没有我不想使用命令的XPG版本的情况?
    • 如果有,什么时候?
  2. 难道我不能盲目地在所有机器上的 rc 文件/usr/xpg4/bin/的开头添加$PATH并放弃将单个命令别名到它们的 XPG* 版本吗?
    • 或者这会导致某些命令出现问题吗?
  3. 这种情况是否/usr/xpg4/bin/只存在于“必要”的机器上?
    • 我问是因为我注意到/usr/xpg4/bin/我的 Ubuntu 机器上不存在。

总而言之,这是一个好主意吗?

if [ -d "/usr/xpg4/bin" ]; then
  #Place XPG directory at beginning of path to always use XPG version of commands
  export PATH="/usr/xpg4/bin:$PATH"
fi
Run Code Online (Sandbox Code Playgroud)

如果没有,为什么不呢?

compatibility path posix command

6
推荐指数
1
解决办法
2742
查看次数

如何遍历用户?

如何循环遍历 shell 脚本中的所有用户?

我正在编写一个 shell 脚本来在系统上执行清理。如果脚本以 root 身份运行,我想在所有用户的主目录中执行请求的操作。

我想我可以遍历/etc/passwd; 中的行。然而,我看到的条目比活着的、呼吸的用户多得多。有什么特殊的方法可以清除虚拟用户/etc/passwd吗?

我更喜欢为 Bourne Shell 量身定制的解决方案(为了便携性)。也欢迎伪代码和纯粹的解释。

users shell-script accounts

6
推荐指数
1
解决办法
7561
查看次数

uname -n 与主机名

uname -n和 和有hostname什么区别?他们返回的内容有什么真正的区别吗?不同操作系统的可用性是否存在差异?其中一个是否包含在 POSIX 中,另一个没有?

hostname posix

6
推荐指数
2
解决办法
4017
查看次数

如何监听进程和串口之间的通信?

在 Gentoo Linux 机器上,一个进程通过串行端口 ( /dev/ttyS1)与另一台计算机通信。我想在不进一步干扰的情况下收听此通信(即进程发送/接收的内容)。

如何仅使用基本的 Linux 工具来实现这一目标?我什至可以更改进程正在与之通信的串行端口,所以也许我可以“快捷地”两个设备(/dev/ttyS1/dev/xxx)侦听所有通信,当所有输出/dev/ttyS1都转发到时/dev/xxx,反之亦然。但是我该怎么做呢?有什么socat

serial-port

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

在登录时执行程序

我在树莓派上运行 Arch-Linux ARM。

我的项目目标是将条形码扫描仪连接到 Pi,将扫描的消息转发到 LAN 中的服务器。

为了加强系统以防止断电等并最大限度地减少所需的用户交互,我希望对其进行设置,以便某个用户在启动时自动登录(完成并工作),并且在启动时运行特定程序(完成并运行)有效但不符合预期)。

到目前为止,我已经通过添加

exec mono scannerSoftware.exe 127.0.0.1 1234 randomString
Run Code Online (Sandbox Code Playgroud)

/home/certainUser/.bash_profile这样会将它甚至当我在来回切换到root(对比的.bashrc)只执行一次。

我遇到的特殊问题:当我启动系统时,它按预期工作(以某个用户身份登录,启动扫描仪软件.exe);但是如果我想切换用户并点击Ctrl+ C,它会重新启动登录过程,再次登录某些用户并再次运行程序 => 回到我来自的地方。

我对为什么会发生这种情况的猜测是系统检测到“登录未完成,最好重新启动”。

我可以通过滥发规避这一Ctrl+C周围的登录权限,让我几乎打断了它。当然,这不是好的做法。可以说它根本不实用。

我的问题:
我如何设置它以便在登录完成后执行程序,以便Ctrl+ C'ing out 将我带到一个正常的 bash 提示,而不是开始无休止的登录周期?

编辑:
我没有使用任何图形界面等,只有命令行(tty 上的 bash),因为完成后系统甚至不会有显示。

bash arch-linux profile raspberry-pi

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

铬证书

如何在命令行中为 google-chrome 添加可信证书?

对于 Firefox,我可以使用certutil二进制。

对于 google-chrome,需要哪个二进制文件或哪些步骤?

chrome certificates

5
推荐指数
1
解决办法
8953
查看次数