Хорошо, так что я, очевидно, задумался над тем, что мне нужно было избежать кавычек, чтобы это работало. Однако это именно то, что я не должен делать! Мне просто нужны без кавычек цитаты, и это работает.
Это потому, что, как указал @ biffen :
" Что касается ошибки: вы по неизвестной причине экранируете кавычки, делаете их не кавычками и, таким образом, передаете три аргумента grep (" sh
, -c
и apt full-upgrade -y"
), говорит ему подсчитать количество «sh
» в файле apt full-upgrade -y"
, и говорит, что не может найти этот файл. »
#!/bin/bash
execute() {
CMDS="$1"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# x-terminal-emulator executes the quoted text by executing 'sh -c "$CMDS"'
# Which is why "ps ax | grep ..." is used to search for the PID that
# matches "sh -c $CMDS"
x-terminal-emulator -e "$CMDS" &> /dev/null
cmdsPID="$(ps ax | grep -v "grep" | grep -v "S+" | grep "sh -c" | grep "$CMDS" | xargs | cut -d ' ' -f 1)"
echo "$cmdsPID"
}
execute "apt full-upgrade -y"