「rm:書き込み保護された通常のファイル[x]を削除しますか?」に対する応答として使用するソリューションを探しています。
私はbashrcで、文字を発行した後、何回か改行することを考えていました。どうすればよいですか?
更新された質問に基づいて編集:
ファイルの削除について質問されないようにするには、-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
を持たないユーザーは、結果をod
、hexdump
またはxxd
にパイプして、返された実際の文字を確認できます。
私が時々遭遇したもう1つの問題は、rm
がrm -i
にエイリアスされていることです。これは/ etc/bashrcで次のようになります。
alias rm='rm -i'
その場合は、unalias rm
を使用するか、数年前に見つけたこのトリックを使用して、エイリアスが設定されているコマンドの前にバックスラッシュを挿入して、そのエイリアスを一度だけ無視することができます。次に例を示します。
\rm somefile
Nixcraft の記事でエイリアスの詳細を確認できます。
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
すべてのコマンドにyesを指定してください!
yes | rm -r /path/
yes | <command>
とにかく、いつでも-f
を使用して強制できます。
rm -r -f /path