相关疑难解决方法(0)

我可以从bash脚本将变量导出到环境中而不需要获取它吗?

假设我有这个脚本

export.bash:

#! /usr/bin/env bash
export VAR="HELLO, VARIABLE"
Run Code Online (Sandbox Code Playgroud)

当我执行脚本,并尝试访问$VAR我没有价值!

echo $VAR
Run Code Online (Sandbox Code Playgroud)

有没有办法$VAR只通过执行export.bash来访问它而不需要采购它?

unix bash shell environment-variables

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

捕获查找的输出.-print0进入bash数组

使用find . -print0似乎是获取bash中文件列表的唯一安全方法,因为文件名可能包含空格,换行符,引号等.

但是,我很难让find的输出在bash或其他命令行实用程序中有用.我设法使用输出的唯一方法是将它传递给perl,并将perl的IFS更改为null:

find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;'
Run Code Online (Sandbox Code Playgroud)

此示例打印找到的文件数,避免文件名中的换行符损坏计数的危险,如下所示:

find . | wc -l
Run Code Online (Sandbox Code Playgroud)

由于大多数命令行程序不支持空分隔输入,我认为最好的方法是捕获find . -print0bash数组中的输出,就像我在上面的perl片段中所做的那样,然后继续执行任务,无论它是什么是.

我怎样才能做到这一点?

这不起作用:

find . -print0 | ( IFS=$'\0' ; array=( $( cat ) ) ; echo ${#array[@]} )
Run Code Online (Sandbox Code Playgroud)

一个更普遍的问题可能是:如何用bash中的文件列表做有用的事情?

arrays bash null find delimiter

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

在Linux Bash中使用命名管道的示例

有人可以在Linux中发布一个在Bash中使用命名管道的简单示例吗?

linux bash pipe

51
推荐指数
4
解决办法
8万
查看次数

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

捕获bash命令的输出,解析它并存储到不同的bash变量中

说明:

我有一个小的bash脚本,它只运行任何 Linux命令(例如说ifconfig)

ifconfig的典型输出是这样的:

eth0      Link encap:Ethernet  HWaddr 30:F7:0D:6D:34:CA
          inet addr:10.106.145.12  Bcast:10.106.145.255  Mask:255.255.255.0
          inet6 addr: fe80::32f7:dff:fe6d:34ca/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1104666 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2171 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:444437904 (423.8 MiB)  TX bytes:238380 (232.7 KiB)

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.255.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:15900 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15900 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 …
Run Code Online (Sandbox Code Playgroud)

linux bash shell scripting

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

无法通过`rvm gemset use`从shell脚本更改RVM gemset

(见底部更新)


我觉得我在这里遗漏了一些非常明显的东西,但是我无法在shell脚本中更改gemsets.这个最小的脚本演示:

#!/usr/bin/env bash

rvm gemset use "testing"
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过Scripting RVM页面中的指令(尽管似乎没有必要):

#!/usr/bin/env bash

# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
  # First try to load from a user install
  source "$HOME/.rvm/scripts/rvm"
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
  # Then try to load from a root install
  source "/usr/local/rvm/scripts/rvm"
else
  printf "ERROR: An RVM installation was not found.\n"
fi

rvm gemset use "testing"
Run Code Online (Sandbox Code Playgroud)

仍然没有去.

有趣的是,如果我尝试在没有首先创建"测试"gemset的情况下运行脚本,我会得到ERROR: Gemset 'testing' does …

bash rvm

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

如何在 node.js 中导出环境变量

我非常喜欢我node.js的,我想用它作为我的bash启动脚本~/.bashrc,但我不知道如何导出变量。

目前我必须使用这种方法:

export PS1=`node ~/PS1.js`
export PS2=`node ~/PS2.js`
export PATH=`node ~/PATH.js`
Run Code Online (Sandbox Code Playgroud)

相反,我想.bashrc看看

#!/usr/local/bin/node
//do something, define functions
export_var('PS1', PS1())
export_var('PS2', PS2())
export_var('PATH', generatePATH())
Run Code Online (Sandbox Code Playgroud)

process.env.PATH = something导出,只为当前正在执行的进程设置,也就是节点本身。

javascript bash environment-variables node.js

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

如何在父shell和子shell之间使用相同的bash变量

我有一个类似于以下的bash脚本:


function test
{
   running=$(( $running - 1 ))
}

running=0
test &
echo $running


因为测试功能在子shell中运行,所以它不会影响运行变量,并且我得到0回显到屏幕.我需要子shell才能更改父shell变量,如何做到这一点?我试过出口但无济于事.

编辑感谢所有有用的答案,我想在后台运行此功能的原因是允许同时运行多个功能.我需要能够回调父脚本,告诉它何时完成所有功能.我一直在使用pid来做这个,但我不想检查循环中是否有多个进程不断存在.

linux variables bash scripting

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

子makefile并向上传递变量

我有一个项目涉及子目录与子makefile.我知道我可以使用export命令通过环境将变量从父makefile传递到子makefile.有没有办法将变量从子makefile传递给它的调用makefile?即可以反过来出口工作?我试过这个没有成功.我猜测一旦子make完成它的shell就会被破坏,同时它的环境变量也会被破坏.还有另一种向上传递变量的标准方法吗?

makefile gnu-make

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

将整个文件读入 C-Shell (csh) 脚本中的变量

我需要将整个文本文件读入一个 shell 变量。已经有关于此的另一个线程,但它只给出了 sh 和 bash 的示例:

如何将文件读入shell中的变量?

我如何在 csh 中做到这一点?

很抱歉开始一个新线程,但我是这个网站的新手,无法发表评论。如果你不能一开始就发表评论,你应该如何建立自己的声誉?

shell csh

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