Решение с использованием COMM
на основе хранения всех переменных до и после:
#!/bin/bash
# Storing variables before:
set -o posix
set > $TMP/VariablesBefore.txt
sort $TMP/VariablesBefore.txt -o $TMP/VariablesBeforeSorted.txt
a=3
b=7
# Storing variables after:
set > $TMP/VariablesNow.txt
sort $TMP/VariablesNow.txt -o $TMP/VariablesNowSorted.txt
# Computing differences:
echo "The variables inside the script are: "
comm -3 $TMP/VariablesBeforeSorted.txt $TMP/VariablesNowSorted.txt
Ну, есть еще несколько переменных, оставшихся вроде _
или Bash_Lineeno
], но это ставка, которую я достиг.
Обратите внимание, что это решение не может работать во всех случаях, например Переменные очень длинные (КБ), с
новой строкой
коды или переменные включая имена переменной. Спасибо, Миксерв, для указывающего.
Проблема в том, что stdin
(стандартный ввод) для команды, запущенной с xargs
(в данном случае rm
) перенаправляется с / dev / null
, а stdin
- это дескриптор файла, используемый rm
для получения подтверждения пользователя.
Вы можете использовать параметр -a
, чтобы rm получал список файлов из промежуточного файла, ранее созданного командой find (параметр -a
делает xargs
, чтобы оставить stdin
нетронутым), в любом случае, я понимаю, это может быть не то, что вам действительно нужно, поскольку для этого требуется промежуточный файл. Более прямой подход, подобный тому, что вы хотели, может быть получен с помощью следующей команды:
for i in $ (find. -Name file); do rm -i "$ i"; done
xargs считывает данные из stdin. Когда вы используете rm -i
rm также пытается прочитать ответ из stdin (попробуйте touch test && echo y | r -i test ; ls test
), но stdin закрыт xargs (я полагаю), поэтому rm реагирует так, как будто вы нажали ctrl-d на приглашение.
Другим решением может быть опция -exec:
touch test
find . -name test -exec rm -i {} \;
Just try that command
find . -type f -iname filename -delete
it is better to delete the need file.
-type f ----> specific the file type ( file or directory or etc. )
-iname ----> ignore the case sensitive ( test or Test)
-delete ----> its one of find command option, its delete files