我试图编写一个简单的bash脚本,用一个字符串变量执行命令。执行bash时,将单引号添加到字符串变量,使命令无效。如何在没有bash脚本引用的情况下执行命令?
#!/bin/bash
key=$(echo $1 | tr '[:lower:]' '[:upper:]')
sudo tee /proc/acpi/bbswitch \<\<\<$key
我得到的输出是
~/scripts$ bash -x nvidia on
++ echo on
++ tr '[:lower:]' '[:upper:]'
+ key=ON
+ sudo tee /proc/acpi/bbswitch '<<<ON'
我想要在没有引号的情况下运行的两个命令是
sudo tee /proc/acpi/bbswitch <<<ON
或
sudo tee /proc/acpi/bbswitch <<<OFF
答案 0 :(得分:3)
问题不在于引号,而是sudo
不通过shell执行命令。所以像<<<
这样的元字符在作为sudo
参数给出时没有任何特殊含义。您需要显式调用shell:
sudo bash -c "tee /proc/acpi/bbswitch <<<$key"
但似乎没有必要为此使用here-string。只需使用:
echo "$key" | sudo tee /proc/acpi/bbswitch
答案 1 :(得分:0)
无需引用import java.util.Scanner;
public class Player {
public String name;
private String input;
private double health;
public double strength;
public double stamina;
public Player (String input){
name = input;
}
public void setHealth(double playHp){
health = playHp;
}
public void setStrength(double playStrn){
strength = playStrn;
}
public void setStamina(double playStam){
stamina = playStam;
}
public void printplayer(){
System.out.println("name : " + name );
System.out.println("Health :" + health);
System.out.println("Strength :" + strength);
System.out.println("Stamina :" + stamina);
}
}
运营商。 <<<
默认情况下不会从标准输入读取;它将它传递给它运行的命令。
sudo