web-dev-qa-db-ja.com

保護されたファイルを削除するときに「y」を数回発行する必要を回避する方法

「rm:書き込み保護された通常のファイル[x]を削除しますか?」に対する応答として使用するソリューションを探しています。

私はbashrcで、文字を発行した後、何回か改行することを考えていました。どうすればよいですか?

60
Iancovici

更新された質問に基づいて編集:

ファイルの削除について質問されないようにするには、-f( "force")オプションを追加します。

rm -f /path/to/file

これには、注意すべき副作用が1つあります。指定されたパスのいずれかが存在しない場合、これはnotと報告し、正常に戻ります。 :

$ rm -f /nonexistent/path
$ echo $?
0

元の答え:

簡単な解決策は次のとおりです。

yes "$string" | head -n $number | tr $'\n' $'\r'

yesは、指定した文字列を改行で区切って無限に繰り返します。 head$number回後に停止し、trは改行を改行に変換します。キャリッジリターンのために出力が表示されない場合がありますが、それをこのコマンド(bash内)に渡すと、次のようになります。

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

bashを持たないユーザーは、結果をodhexdumpまたはxxdにパイプして、返された実際の文字を確認できます。

85
l0b0

私が時々遭遇したもう1つの問題は、rmrm -iにエイリアスされていることです。これは/ etc/bashrcで次のようになります。

alias rm='rm -i'

その場合は、unalias rmを使用するか、数年前に見つけたこのトリックを使用して、エイリアスが設定されているコマンドの前にバックスラッシュを挿入して、そのエイリアスを一度だけ無視することができます。次に例を示します。

\rm somefile

Nixcraft の記事でエイリアスの詳細を確認できます。

7
slm

rmは、書き込み保護されたファイルを「インタラクティブに」(ユーザー入力を待機するプロンプト)要求するようにハードコードされています。 rmが要求しないようにする2つの方法があります。

rm -rf somedir

そして

rm -r --interactive=never somedir

(dirsの代わりにファイルを削除する場合、どちらも-rなしで機能します)

説明:

-fは、rmを「存在しないファイルと引数を無視し、プロンプトを表示しない」ようにします。

--interactive=neverは、それが言っていることを実行します。決してインタラクティブにしないでください。つまり、プロンプトを表示しないでください。

-f--interactive=neverの違いは、「存在しないファイルと引数を無視する」という部分です。

比較:

$ rm -rf nonexistingname
$ echo $?
0

そして

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1

違いは、rmをインタラクティブにしたくないが、エラーを処理したいスクリプトを書くときに主に興味深いものです。

概要:コマンドラインではrm -rfを使用します。スクリプトではrm -r --interactive=neverを使用します。


記載された質問(「保護されたファイルを削除するときに「y」を何度か発行する必要を回避する方法)」の回答については、 https://askubuntu.com/questions/338857/automatically-enter-input-in -command-line/338860#33886

5
lesmana

すべてのコマンドにyesを指定してください!

yes | rm -r /path/
yes | <command>

とにかく、いつでも-fを使用して強制できます。

rm -r -f /path
1
Nakamoto