小编tha*_*guy的帖子

如何在Linux中的变量中存储命令?

我想存储一个命令,以便稍后在变量中使用(不是命令的输出,而是命令本身)

我有一个简单的脚本如下:

command="ls";
echo "Command: $command"; #Output is: Command: ls

b=`$command`;
echo $b; #Output is: public_html REV test... (command worked successfully)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试更复杂的东西时,它会失败.例如,如果我做

command="ls | grep -c '^'";
Run Code Online (Sandbox Code Playgroud)

输出是:

Command: ls | grep -c '^'
ls: cannot access |: No such file or directory
ls: cannot access grep: No such file or directory
ls: cannot access '^': No such file or directory
Run Code Online (Sandbox Code Playgroud)

知道如何在变量中存储这样的命令(使用管道/多个命令)供以后使用吗?

linux variables bash command

101
推荐指数
4
解决办法
15万
查看次数

我刚刚分配了一个变量,但echo $ variable显示了其他内容

以下是一系列echo $var可以显示与刚刚分配的值不同的值的情况.无论指定的值是"双引号","单引号"还是不引用,都会发生这种情况.

如何让shell正确设置我的变量?

星号

预期的输出是/* Foobar is free software */,但我得到一个文件名列表:

$ var="/* Foobar is free software */"
$ echo $var 
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Run Code Online (Sandbox Code Playgroud)

方括号

期望值是[a-z],但有时我会得到一个字母!

$ var=[a-z]
$ echo $var
c
Run Code Online (Sandbox Code Playgroud)

换行(换行符)

预期值是一个单独的行列表,但所有值都在一行!

$ cat file
foo
bar
baz

$ var=$(cat file)
$ echo $var
foo bar baz
Run Code Online (Sandbox Code Playgroud)

多个空间

我期望一个精心对齐的表头,但是多个空格要么消失要么折叠成一个!

$ var="       title     |    count"
$ echo $var
title | count
Run Code Online (Sandbox Code Playgroud)

标签

我期望两个制表符分隔值,但我得到两个空格分隔值!

$ …
Run Code Online (Sandbox Code Playgroud)

bash shell sh quoting

87
推荐指数
4
解决办法
15万
查看次数

为什么Runtime.exec(String)适用于某些命令但不适用于所有命令?

当我尝试运行时Runtime.exec(String),某些命令可以正常工作,而其他命令则执行但是失败或做的事情与终端不同.这是一个独立的测试用例,演示了这种效果:

public class ExecTest {
  static void exec(String cmd) throws Exception {
    Process p = Runtime.getRuntime().exec(cmd);

    int i;
    while( (i=p.getInputStream().read()) != -1) {
      System.out.write(i);
    }
    while( (i=p.getErrorStream().read()) != -1) {
      System.err.write(i);
    }
  }

  public static void main(String[] args) throws Exception {
    System.out.print("Runtime.exec: ");
    String cmd = new java.util.Scanner(System.in).nextLine();
    exec(cmd);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我用命令替换命令,该示例效果很好echo hello world,但对于其他命令 - 尤其是那些涉及带有空格的文件名 - 我即使命令明确执行也会出错:

myshell$ javac ExecTest.java && java ExecTest
Runtime.exec: ls -l 'My File.txt'
ls: cannot access 'My: No such file …
Run Code Online (Sandbox Code Playgroud)

java runtime.exec

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

如何压缩命令的错误信息?

如何禁止shell命令的错误消息?

例如,如果jpg目录中只有文件,则运行ls *.zip会显示错误消息:

   $ ls *.zip
   ls: cannot access '*.zip': No such file or directory
Run Code Online (Sandbox Code Playgroud)

有没有选项可以抑制此类错误消息?我想在bash脚本中使用此命令,但我想隐藏所有错误.

linux bash

35
推荐指数
3
解决办法
4万
查看次数

当我用sh运行它时,为什么我的bash代码会失败?

我有一行代码可以在我的终端中正常工作:

for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
Run Code Online (Sandbox Code Playgroud)

然后我在脚本中放入完全相同的代码行myscript.sh:

#!/bin/sh
for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
Run Code Online (Sandbox Code Playgroud)

但是,现在运行时出现错误:

$ sh myscript.sh
myscript.sh: 2: myscript.sh: Bad substitution
Run Code Online (Sandbox Code Playgroud)

基于其他问题,我尝试将shebang更改为#!/bin/bash,但我得到完全相同的错误.为什么我不能运行这个脚本?

bash sh substitution

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

如何在单引号字符串中使用变量?

我只是想知道如何在单引号内回显变量(我使用单引号,因为字符串中有引号).

     echo 'test text "here_is_some_test_text_$counter" "output"' >> ${FILE}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激

string bash shell echo

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

如何传递包含引号/空格的脚本参数?

我正在尝试编写一个notify-finish可以添加到任何命令之前的脚本.完成后,它将运行以下参数给出的命令,然后在命令完成时通过电子邮件发送给用户.这就是我所拥有的:

PROG=$1
# Run command given by arguments
$@
ECODE=$?
echo -e "Subject: `hostname`: $PROG finished\r\nTo: <$USER>\r\n\r\nExited with $ECODE\r\n" | sendmail $USER
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都有效,但是当参数包含空格时,引用会被删除.

工作范例:

notify-finished rsync -avz source/ user@remote:dest/
Run Code Online (Sandbox Code Playgroud)

失败的例子:

notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,$@扩展到rsync -avz -e ssh -c blowfish source user@remote:dest/,缺少单引号.它也不适用于双引号,也不适用于$*.

在阅读其他帖子之后,我尝试将命令放在一个数组中,但是我得到了完全相同的问题:

CMD=(notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/)
${CMD[@]}
Run Code Online (Sandbox Code Playgroud)

我如何使这项工作适用于所有论点?

bash quoting

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

无法让ASCII艺术回显到控制台

我是Bash脚本的新手,这对我来说很困惑.我正在为项目添加ASCII艺术,似乎无法弄清楚如何逃避某些字符.有人请帮助我下面的代码工作吗?

每当我尝试添加斜杠作为转义字符来修复错误时,斜杠也会在执行时打印到控制台.这破坏了形象.我不明白我做错了什么,所以我发布了下面的代码,希望有人花一点时间向我展示正确的方法.请?我删除了引号以防止更混乱.

echo -en "\E[31m"
echo
echo       _,.
echo     ,` -.)
echo    '( _/'-\\-.              
echo   /,|`--._,-^|          ,    
echo   \_| |`-._/||          ,'|      
echo     |  `-, / |         /  /     
echo     |     || |        /  /      
echo      `r-._||/   __   /  / 
echo  __,-<_     )`-/  `./  /
echo '  \   `---'   \   /  /
echo     |           |./  / 
echo     /           //  /    
echo \_/' \         |/  /        
echo  |    |   _,^-'/  /             
echo  |    , ``  (\/  /_       
echo   \,.->._    \X-=/^        
echo   ( …
Run Code Online (Sandbox Code Playgroud)

bash scripting ascii syntax-error

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

X11等待并获取剪贴板文本

我必须监控X11剪贴板.

目前,我每隔5秒请求ClipBoard选择,然后我对从剪贴板返回的文本进行哈希处理,并将其与上次检查中的哈希计算进行比较.如果哈希不一样,我分析文本内容并做一些事情......

我不喜欢我的方法.我来自Windows,并且使用winapi,当剪贴板发生变化时,内核会通知您的程序,并且效率更高!

我只想知道当剪贴板发生变化时,X11是否可以将您的程序通知为winapi?使用X11检查剪贴板修改的更有效方法是什么?

c x11

14
推荐指数
2
解决办法
4456
查看次数

如何使用包名运行java类

我有两个java类如下:

1.

class App1 {
    public static void main(String[] args) {
        System.out.println("App1 hello world...");
    }
}
Run Code Online (Sandbox Code Playgroud)

2.

package java.java.package1;    
class App2 {
    public static void main(String[] args) {
        System.out.println("App2 hello world...");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我编译并运行它们,结果如下:

D:\javaTest>javac App1.java

D:\javaTest>javac App2.java
Run Code Online (Sandbox Code Playgroud)

那么如何运行App2类呢?

java

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

标签 统计

bash ×7

java ×2

linux ×2

quoting ×2

sh ×2

shell ×2

ascii ×1

c ×1

command ×1

echo ×1

runtime.exec ×1

scripting ×1

string ×1

substitution ×1

syntax-error ×1

variables ×1

x11 ×1