小编Sil*_*eth的帖子

有没有设置目录/项目本地环境变量的好方法?

我一直在做几个项目,它们需要不同的环境变量(例如,PATH对于不同版本的clang可执行文件,PYTHONPATH对于几个外部模块)。每当我在一个项目上工作时,我必须自己修改这些环境变量(例如,更改.zshrc/.bashrcsource它);我有时会忘记并犯错。

是否有一种方法/项目可以帮助自动执行此操作,类似于virtualenv在 Python 中所做的工作?

shell bash zsh environment-variables

13
推荐指数
1
解决办法
6175
查看次数

如何在 FreeBSD 中将用户添加到组

如何将现有用户添加到 FreeBSD 的组中?该命令usermod不起作用。

freebsd users

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

如何限制每个用户的活动登录次数?

如何限制每个用户的活动登录次数?

我以前在各种服务器上看到过这个,我想知道如何自己设置它。也许在这些情况下,这是通过限制每个用户的活动 SSH 登录次数来实现的?我想这将是要走的路。我该如何设置?

users login ssh

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

我怎样才能安全地获得 ksh 的版本?

如何从 ksh 脚本中安全地获取 ksh 版本?

我已经看到以下解决方案

  1. ksh --version
  2. echo ${.sh.version}
  3. echo $KSH_VERSION

并且在适当的情况下,每一个都可以正常工作。但是,我关心不完美的情况。

具体来说,我使用的几台机器都有旧版本的 ksh,就我而言,这些机器严重缺乏功能。无论如何,我想(以编程方式)检查版本的原因是查看 ksh 版本是否是功能较弱的版本之一;如果是这样,我想用不那么棒的代码执行一个分支。

然而,在有问题的机器上,shell 的无能扩展到检查版本......

  • 如果我尝试ksh --version,它不会打印任何内容并打开ksh!
  • 如果我尝试echo ${.sh.version}ksh则将其视为不能用2> /dev/null.

    $ echo ${.sh.version} 2> /dev/null  
    ksh: ${.sh.version}: bad substitution
    
    Run Code Online (Sandbox Code Playgroud)
  • 当然echo $KSH_VERSION看起来工作正常——我的意思是它不会崩溃——尽管在这些机器上它是空白的。另外,我看到的地方KSH_VERSION只被设定pdksh

问题:

  • 如何以ksh编程方式安全地检查版本?出于我的目的,我并不真正关心实际的版本号是什么,只关心它是否是ksh.
  • 是否$KSH_VERSION足够好?我的意思是如果它是空白的,那么ksh一定是过时的版本吗?其他论坛是否正确,即使对于较新版本的ksh.
  • 根本就没有办法检查这个吗?

ksh version shell-script portability

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

autoreconf 因“无法执行“libtoolize”而失败”

我想了解 autotools,所以我刚开始在 YouTube 上观看一些教程。

我创建了一个名为的文件夹hello,然后创建了一个configure.ac文件:

AC_INIT([hello],[.01])
AC_OUTPUT 
Run Code Online (Sandbox Code Playgroud)

我保存了它然后跑了autoreconf -i。显然,这在第一次不起作用,因为它没有安装。然后我autoconf通过命令安装sudo apt-get install autoconf2.13

现在在此之后我再次运行autoreconf -i,但现在我收到如下所示的错误:

Can't exec "libtoolize": No such file or directory at /usr/bin/autoreconf2.50 line 196.
Use of uninitialized value in pattern match (m//) at /usr/bin/autoreconf2.50 line 196.
Run Code Online (Sandbox Code Playgroud)

debian autoconf

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

半异步管道

假设我有以下管道:

a | b | c | d
Run Code Online (Sandbox Code Playgroud)

我怎样才能在or 中等待c(或b)完成?这意味着该脚本可以开始任何时间(和它不是必须等待),但需要完整的输出正确地工作。shbashdc

用例是difftool用于git比较图像。它被调用git并需要处理其输入(a | b | c零件)并显示比较的结果(d零件)。调用者将删除a和所需的输入b。这意味着在从脚本返回之前,进程c(或b)必须终止。另一方面,我不能等待,d因为这意味着我正在等待用户输入。

我知道我可以将结果写入c临时文件,或者在bash. (不过,不确定 FIFO 是否会有所帮助。)是否可以在没有临时文件的情况下实现这一点sh

编辑

如果我能以可靠的方式找出c(或b)进程的进程 ID,也许就足够了。然后整个管道可以异步启动,我可以等待进程 ID。类似的东西

wait $(a | b | { c & [print PID of c] ; } | d)
Run Code Online (Sandbox Code Playgroud)

编辑^2 …

shell bash pipe fifo

11
推荐指数
2
解决办法
3114
查看次数

使用 yum 安装时可以自动执行 y/N 响应吗?

当我在 Fedora 中使用 say 运行安装yum groupinstall "Development Tools"时,有时会提示我点击 y/N。

当出现此类提示时,我可以告诉操作系统自动选择“y”吗?那会让我离开我的电脑一段时间然后回来。

yum

10
推荐指数
1
解决办法
8854
查看次数

为什么 bash 测试对空格如此挑剔?

作为一名主要的 Java 程序员,我发现 bash if-then构造非常令人困惑,尤其是在空格方面。谁能解释为什么第一个有效,而第二个或第三个无效?

#works
if [ -n $1 ]; then echo "parameterized"; fi

#output: ./links: Zeile 1: [-n: Kommando nicht gefunden.
if [-n $1 ]; then echo "parameterized"; fi

#output: ./links: Zeile 1: [: Fehlende `]'
if [ -n $1]; then echo "parameterized"; fi
Run Code Online (Sandbox Code Playgroud)

shell bash whitespace test

10
推荐指数
2
解决办法
7025
查看次数

如何在 FreeBSD 上安装最新的 gcc?

我如何gcc在 FreeBSD 上安装最新版本并设置系统,以便使用这个最新版本来编译更多程序?

在撰写本文时,最新版本gcc是 4.9.0。我使用 FreeBSD 10.0。

我实际上需要g++,C++ 编译器;但我需要gcc49为它安装类似package 的东西,对吗?

freebsd gcc g++

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

如何在可执行文件被杀死时自动删除目录

很多时候,我们运行一个需要写入/读取一些临时文件的可执行文件。我们通常创建一个临时目录,在那里运行可执行文件,并在脚本完成后删除该目录。

即使可执行文件被杀死,我也想删除该目录。我试图将它包装在:

#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
Run Code Online (Sandbox Code Playgroud)

my_binary死掉时,内核将删除该目录的最后一个进程,因为脚本是持有该目录的最后一个进程inode;但我无法在删除的目录中创建任何文件。

#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
Run Code Online (Sandbox Code Playgroud)

产出 touch: file.txt: No such file or directory

我能想到的最好方法是在进程终止时删除临时目录,捕获最常见的信号,并使用 cron 运行清理进程:

#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
Run Code Online (Sandbox Code Playgroud)

有没有一些简单的方法来创建一个真正的临时目录,无论发生什么,当当前二进制文件死亡时都会自动删除该目录?

bash files

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