小编Ale*_*lls的帖子

Glob 匹配子目录

希望我不是唯一一个发现 glob 行为不当的人。如果你在一小时前问我,我有 99% 的把握

test/src/**/*.js
Run Code Online (Sandbox Code Playgroud)

将匹配 src 中的所有 .js 文件和 src 的所有子目录。但我在 MacOS 上使用 Bash 3.2.57,它不匹配多个文件。

有谁知道可能有什么问题?

osx bash wildcards

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

删除特定可执行路径的 bash 哈希

gmx在这两条路径上调用了一个命令:

/usr/local/bin/gmx
Run Code Online (Sandbox Code Playgroud)

/Users/alexamil/.nvm/versions/node/v9.2.0/bin/gmx
Run Code Online (Sandbox Code Playgroud)

我怎样才能删除其中一个的 bash 哈希?

如果我跑:

hash -d gmx
Run Code Online (Sandbox Code Playgroud)

删除的是哪一个?是删除两者,还是只删除最近的值?这对删除特定的有效吗?

hash -d  "/Users/alexamil/.nvm/versions/node/v9.2.0/bin/gmx"
Run Code Online (Sandbox Code Playgroud)

bash path command

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

使用或运算符的类似测试表达式?

只是想知道这是否:

if [ "$first_arg" == "major" ] || [ "$first_arg" == "minor" ]; then
        exit 1;
fi
Run Code Online (Sandbox Code Playgroud)

与此相同:

if [ "$first_arg" == "major" || "$first_arg" == "minor" ]; then
      exit 1;
fi
Run Code Online (Sandbox Code Playgroud)

bash shell-script test

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

为什么 echo <<EOF ... EOF 不起作用

只是想知道是否有人可以解释为什么会这样:

echo `cat <<EOF
  {"branch":"foo","value":"bar"}
EOF`
Run Code Online (Sandbox Code Playgroud)

但这不是:

echo <<EOF
  {"branch":"foo","value":"bar"}
EOF
Run Code Online (Sandbox Code Playgroud)

(第二个片段不会向标准输出回显任何内容。)

echo cat stdout stdin here-document

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

如何向多个进程发送SIGINT

我正在尝试将 SIGINT 信号发送到多个进程,我认为这是正确的:

kill -2 <pid1> <pid2> ... <pid3>
Run Code Online (Sandbox Code Playgroud)

但我无法确认...

kill signals sigint

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

管道到文件不适用于中间管道

这导致了问题:

node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE}  &
Run Code Online (Sandbox Code Playgroud)

这有效:

node "$SUMAN_PROJECT_ROOT/server.js"  &> ${LOG_FILE}  & 
Run Code Online (Sandbox Code Playgroud)

问题是使用第一个命令时,输出没有发送到文件。在第二个命令中,它确实被发送到文件。为什么第一个命令不起作用 - 我希望它会像第二个命令一样将输出发送到文件。bunyan 命令应该像 grep 一样,只是过滤和映射 node 命令的输出。

我的编辑不喜欢建议的解决方案:

在此处输入图片说明

streaming pipe shell-script

0
推荐指数
1
解决办法
1001
查看次数

如果文件不存在,bash重定向到文件

我有这个 bash 代码:

  if [[ ! -f "$HOME/.oresoftware/package.json" ]]; then
       cat "node_modules/@oresoftware/package.json" > "$HOME/.oresoftware/package.json";
    fi
Run Code Online (Sandbox Code Playgroud)

但是有没有办法只重定向到一个文件,如果它不存在于一行代码中?像这样:

   cat "node_modules/@oresoftware/package.json" ?> "$HOME/.oresoftware/package.json";
Run Code Online (Sandbox Code Playgroud)

我想那会很有趣

shell bash io-redirection shell-script cat

0
推荐指数
1
解决办法
1763
查看次数

缩短 if 语句检查匹配参数

我有这段代码可以完成它应该做的事情:

first_arg="$1";
if [ "$first_arg" != "patch" -a "$first_arg" != "major" -a "$first_arg" != "minor" -a "$first_arg" != "prerelease" ]; then
  echo "First argument needs to match a valid npm version argument (patch, minor, major, etc).";
  exit 1;
fi
Run Code Online (Sandbox Code Playgroud)

它正在检查确保第一个参数是(补丁、主要、次要、预发行)之一。

但是,是否有更短/更简洁的方法来做到这一点?

bash shell-script test

0
推荐指数
1
解决办法
147
查看次数

运行不带引号的 ssh 命令

您可以使用以下命令在远程服务器上执行命令

ssh user@host 'the command'
Run Code Online (Sandbox Code Playgroud)

但有没有办法在不带引号的情况下执行命令?

(我使用 BSD 并使用 OpenSSH)

command-line shell ssh quoting

0
推荐指数
1
解决办法
1579
查看次数

如何使用 AWK 回显颜色

我有这个:

cm_env(){
 env | grep 'cm_' | while read line; do
    echo "$line" | awk -F'=' '{print $1 $2}'
 done;
}
Run Code Online (Sandbox Code Playgroud)

我想打印这样的东西:

env_var1=this_is_in_blue
env_var2=this_is_in_blue_too
env_var3=this_is_colored_blue
Run Code Online (Sandbox Code Playgroud)

我必须使用 AWK 以外的其他工具来执行此操作吗?

问题是双引号似乎不起作用:

export cm_color_gray='\033[1;30m'
export cm_color_cyan='\033[1;36m'

cm_env(){
 env | grep 'cm_' | while read line; do
    echo "$line" | awk -F'=' '{print $1 $cm_color_cyan $2 $cm_color_no_color}'
 done;
}
Run Code Online (Sandbox Code Playgroud)

我试过这个:

echo "$line" | awk -F'=' "{print \$1 $cm_color_cyan \$2 $cm_color_no_color}"
Run Code Online (Sandbox Code Playgroud)

但我得到了:

awk: 1: 意外字符 '\'

有没有办法使用 awk 来做到这一点?

shell bash awk

0
推荐指数
1
解决办法
972
查看次数