我想在管道外运行“历史记录”或“!23”之类的命令。
echo "history" | xargs eval $1
答案 0 :(得分:2)
首先要回答(2):
history
和eval
都是bash内置函数。因此xargs
无法运行它们中的任何一个。xargs
不使用$1
自变量。 man xargs
获取正确的语法。对于(1),执行您要尝试的操作实际上没有多大意义,因为shell历史记录不太可能在调用之间同步,但是您可以尝试执行以下操作:
{ echo 'history'; echo '!23'; } | bash -i
或:
{ echo 'history'; echo '!23'; } | while read -r cmd; do eval "$cmd"; done
请注意,管道在子Shell中运行。不保留环境更改:
x=1; echo "x=2" | while read -r cmd; do eval "$cmd"; done; echo "$x"
答案 1 :(得分:0)
您可以尝试这样 首先将历史记录命令重定向到一个文件(剪切出行号)
history | cut -c 8- > cmd.txt
现在创建此脚本hcmd.sh(此Read a file line by line assigning the value to a variable的参考)
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "Text read from file: $line"
$line
done < "cmd.txt"
像这样运行它
./hcmd.sh