我无法理解如何有效地使用全局变量。根据我对 bash 的理解,除非按照http://tldp.org/LDP/abs/html/localvar.html明确声明为本地变量,否则每个变量都是全局变量。因此,我的理解是,如果我构建这样的函数:
# This function will determine which hosts in network are up. Will work only with subnet /24 networks
is_alive_ping() # Declare the function that will carry out given task
{
# declare a ip_range array to store the range passed into function
declare -a ip_range=("${!1}")
# declare active_ips array to store active ip addresses
declare -a active_ips
for i in "${ip_range[@]}"
do
echo "Pinging host: " $i
if ping -b -c 1 $i > /dev/null; …Run Code Online (Sandbox Code Playgroud) 我有一个包含 606,347列的平面文件 (.txt),我想提取 50,000 个随机列,第一列除外,第一列是样本识别。我如何使用 Linux 命令来做到这一点?我的文件看起来像:
ID SNP1 SNP2 SNP3
1 0 0 2
2 1 0 2
3 2 0 1
4 1 1 2
5 2 1 0
Run Code Online (Sandbox Code Playgroud)
它是由 TAB 分隔的。
非常感谢。
干杯,
宝拉。
这个问题纯属好奇。通过date从 bash运行命令来获取日期很容易,但它是一个外部可执行文件,需要生成一个子进程。我想知道是否有可能在没有子进程的情况下格式化当前时间/日期。我只能找到日期/时间格式引用的背景下PS1和HISTTIMEFORMAT。后者允许这样做:
HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
history -s echo
x=$(history)
set -- $x
date="$2"
Run Code Online (Sandbox Code Playgroud)
这很接近,但$(history)据我所知,它产生了一个子进程。
我们能做得更好吗?
在我的脚本中,我需要找出用户是否在拨出组中,如果不在,则将他添加到组中。我已经找到了添加他的方法,但是有没有办法知道他是否在组中?
有没有人成功创建一个指向它自己的符号链接?我试图创建一个指向某个文件的符号链接,删除真实文件并尝试自行链接到它,但出现此错误:
ln: creating symbolic link `********': File exists
Run Code Online (Sandbox Code Playgroud)
我知道可以创建这个符号链接。
我正在编写一个 bash 脚本以在 Linux 系统上以非交互方式启用休眠。为此,我需要在该行的引号内插入一个包含斜线的 shell 变量。
要编辑的文件的相关部分如下所示:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
Run Code Online (Sandbox Code Playgroud)
我需要把它改成这样:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3"
GRUB_CMDLINE_LINUX=""
Run Code Online (Sandbox Code Playgroud)
添加的参数由 shell 变量提供。
我试过这个:
sed -i '\*^GRUB_CMDLINE_LINUX_DEFAULT* s*"$* '"$(grub_resume_boot_option)"'"*' /etc/default/grub
Run Code Online (Sandbox Code Playgroud)
我的目标逻辑是:“查找以模式“GRUB_CMDLINE_LINUX_DEFAULT”开头的行,并用给定的模式替换最后一个“。使用 * 作为分隔符来保留扩展变量中的斜杠。”
但是,如果行尾有任何空格,则该命令将失败。有没有办法让它不考虑行尾的空格?
另外,如果对此有更简单或可读的解决方案,我会非常感兴趣。
我正在使用xen,并且以xen top百分比形式获得总CPU使用率:
NAME STATE CPU(sec) CPU(%) MEM(k) MEM(%) MAXMEM(k) MAXMEM(%) VCPUS NETS NETTX(k) NETRX(k) VBDS VBD_OO VBD_RD VBD_WR VBD_RSECT VBD_WSECT SSID
VM1 -----r 25724 299.4 3025244 12.0 20975616 83.4 12 1 14970253 27308358 1 3 146585 92257 10835706 9976308 0
Run Code Online (Sandbox Code Playgroud)
从上面我可以看到,我看到CPU使用率是299%,但我如何从VM获得总CPU使用率?
Top没有告诉我总的用法.
我正在运行以下命令,只要它们在第一个文件中是内容的,它就会很好用:
awk -F, 'FNR==NR {a[tolower($1)]++; next} !a[tolower($1)]' OutSideSyncUsers.csv NewUsers.csv
Run Code Online (Sandbox Code Playgroud)
如果第一个文件为空,则该命令不起作用.我在网上找到了这个参考:
如果第一个文件为空,那么使用双文件习惯用法的所有程序将无法正常工作(在这种情况下,awk将在读取第二个文件时执行与NR == FNR相关的操作).要纠正这个问题,您可以通过添加一个测试来强化NR == FNR条件,该测试检查FILENAME是否等于ARGV [1].
我不确定我理解查询中添加测试检查的方式(或在哪里)等于ARGV [1]
任何帮助都会得到满足
在我的脚本中,我试图从多个串行端口读取数据以协调多个设备。
我可以使用exec 9</dev/ttyACM0 && exec 8</dev/ttyACM1等将文件描述符打开到串行端口。
我在跳,然后我可以select()对这些文件描述符执行类似的操作以等待数据到达,然后使用read 0<&9或read 0<&8取决于接收到的数据来处理它。不幸的是,我找不到select()Bash的等价物。
我能找到的最接近的是read -t 0 0<&9用来轮询要读取的数据。我不喜欢这个,因为它需要一个sleep来防止脚本消耗 100% 的处理器。虽然亚秒级睡眠是可能的,例如while true; do sleep 0.01; done这会消耗我系统上大约 4% 的处理器。我可以将它回退到 0.1 秒并将其减少到 <1%,但它仍然“感觉”不是正确的方法,因为它为设备之间的任何协调增加了至少 100 毫秒的额外延迟。
有什么解决办法吗?是否有 Bash select() 等价物?
我正在使用适用于 Windows 的 Git Bash(例如,我右键单击某个目录并从上下文菜单中选择“此处的 Git Bash”)。Node.js v5.10.1。
这是我完整的 Node.js 脚本example.js:
console.log(process.argv);
Run Code Online (Sandbox Code Playgroud)
这是我的命令行和输出:
$ node example.js "https://example.com"
[ 'C:\\...\\node.exe',
'C:\\...\\example.js',
'https:\\example.com' ]
Run Code Online (Sandbox Code Playgroud)
请注意输入参数“ https://example.com ”如何有两个文字正斜杠,但结果字符串“https:\\example.com”有一个文字反斜杠。
我发现命令行中没有多少反斜杠转义(例如“https:\\/example.com”)或额外的正斜杠(例如“ https://////example.com ”)可以阻止这种情况发生。结果总是一个字面反斜杠。
使用相同的 Node.js 可执行文件从普通的 Windowscmd.exe窗口运行相同的脚本不会导致此行为。从 Git Bash for Windows 运行等效的 Python 脚本也不会导致此行为。
看这个:
$ node.exe -e "console.log(process.argv)" "https://example.com"
[ 'C:\\...\\node.exe',
'https://example.com' ]
$ node -e "console.log(process.argv)" "https://example.com"
[ 'C:\\...\\node.exe',
'https:\\example.com' ]
Run Code Online (Sandbox Code Playgroud)
为什么从调用末尾删除“.exe”会导致斜线反转?如果相关,我正在使用 NVM 1.1.0。which node.exe并which node返回相同的结果,都指向该 …