タグ付けされた質問 「shell」

シェルは、Unixのコマンドラインインターフェイスです。シェルにインタラクティブにコマンドを入力するか、スクリプトを記述してタスクを自動化できます。/ bin / shおよび最も互換性のあるシェル(ash、bash、ksh、zshなど)に適用される質問には、このタグを使用します。エラーのあるシェルスクリプトについては、ここに投稿する前にhttp://shellcheck.netで確認してください。

3
エスケープシーケンスを使用して制御文字を印刷する方法
tputを使用して赤を定義しました red=$(tput setaf 1) 私のプログラムの警告を色分けします。これはうまくいきます: printf '%sfail\n' "$red" # prints 'fail' in red ただし、次のようなエスケープシーケンスをそのまま出力したい場合があります。 \ E [31mfail どうすればいいですか?printfに%qフラグがあることは知っていますが、それは私がしたくない他のものをエスケープします。

3
bash変数の改行
私はbash変数に複数の行を格納しようとしていますが、動作しないようです。 たとえば、/bin1行に1つのファイルをリストしてに保存すると$LS、$LSstdinとしてに渡されwc、常に1が返されます。 $ ls -1 /bin | wc -l 134 $ LS=$(ls -1 /bin); wc -l <<< $LS 1 画面に出力しようとすると、さまざまな結果が得られます。echoすべての行を1行にprintf出力し、最初の行のみを出力します。 #!/bin/bash LS=$(ls -1 /bin) echo $LS printf $LS では、bash変数には複数の行を含めることができますか?
9 bash  shell  quoting 

4
CLIを使用して日付でファイルを別のディレクトリに移動する
古いハードドライブから整理しようとしている写真がたくさんあります。を実行するとls -l、これらのすべてのファイルの作成日が2012年以前であることがわかります。理想的には、これらを自動的にマウントするように設定されていない私のコンピューターの2番目のハードドライブに移動したいと思います。できれば、いくつかのコマンドがリンクされたバッチとしてこれをすべて行うことができます。これまでのところ、ls -l | grep -i 2012によって提供された日付で2012のファイルのみを吐き出していますls -l。ここでの秘訣はcp、これらのファイルすべてを新しいディレクトリに配置することです。各ファイルをコピーする必要があるため、これで次にどこへ行くかわかりません。次のコマンドセットは何ですか?

1
サブシェルを引用し、結果をエコーに渡す最後に改行がないのはなぜですか?
ls | grep pnggrepの出力を行うと、次のようになります。 2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png (ファイル名、改行、ファイル名、改行) 次に、echo $(ls | grep png)出力: 2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png (ファイル名、単語分割からのスペース、ファイル名、改行!!エコーから!!) これで問題ありませんが、単語の分割を防ぐためにこれを行うecho "$(ls | grep png)"と、出力は次のようになります。 2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png そして私の質問は、2番目の改行はどこにあるのか(1つはgrepから、もう1つはechoから)ですか?

1
Linux:ローカル変数のsetコマンド
ローカル/環境変数とエクスポート/設定コマンドを理解しようとしています。 $ set FILEM="razrax" $ echo $FILEM $ FILEN="test" $ echo $FILEN test echo $FILEM空の文字列を返す理由を説明してください
9 bash  shell  variable 

2
bashが「>>()」を処理する方法
出力のリダイレクトとプロセスの置換を実験しているときに、次のコマンドとその結果の出力を偶然見つけました。 me @ elem:〜$ echo foo>>(cat); エコーバー バー me @ elem:〜$ foo (はい、最後の空の改行は意図的なものです。) つまり、echoのバーをbashし、通常のプロンプトを表示し、echoのfoo、echoは改行、カーソルをそこに残します。もう一度Enterキーを押すと、プロンプトが新しい行に出力され、カーソルはそのあとに表示されます(空のコマンドラインでEnterキーを押すと期待どおり)。 私はそれがファイル記述子にfooを書き込み、猫がそれを読み取り、2番目のエコーエコーのバーであるエコーのfooを読み取り、その後コマンドプロンプトに戻ることを期待していました。しかし、明らかにそうではありません。 誰かが何が起こっているのか説明してもらえますか?

3
pbrunコマンドとsudoコマンドの違いは何ですか?
pbrunコマンドとsudoコマンドの違いは何ですか? 私はpbrun sudo suを実行している人々を見てきました-これはどういう意味ですか?私はsu-を知っています、それはrootユーザーに切り替えようとします。 sudoコマンドと一緒に使用すると、pbrunはsudoにどのような特別な機能を与えますか

2
ユーザーが実行したいコマンドを実行する前に別のコマンドを実行します
lsツールの元の動作を次のように変更したいとします。 $ ls Hello World file1 file2 ... これどうやってするの? 実行しているときls、私は別のコマンドレットの発言権を実行したいと思いますecho "Hello World!"。 私が目にする簡単な解決策は、エイリアスを使用することです: alias orig_ls="ls" alias ls='echo "Hello World!"' ただし、実行orig_lsすると出力されるため、これは実際のソリューションではありません"Hello World!"。

2
生成された子プロセスが失敗した場合は、すべてを終了して終了します
私のスクリプトでは、データセットをinput_aa、input_abなどに分割しています。次に、同じPythonスクリプトをそれぞれ実行します。 # Execute program on each split file for part in input_*; do python3 $part & done wait 私の質問は2つあります。Pythonプロセスが失敗したことをどのように検出しますか。検出された場合、生成されたすべての子を強制終了し、失敗してスクリプトを終了するにはどうすればよいですか。
9 bash  shell  python 

1
ksh93はとても高速ですか?
そのため、一般的に、私はsedテキスト処理、特に大きなファイルを探す傾向があり、通常はシェル自体でそのようなことを行うのを避けます。 しかし、それは変わるかもしれないと思います。私はあちこち見ていてman ksh、これに気づきました: <#pattern Seeks forward to the beginning of the next line containing pattern. <##pattern The same as <# except that the por‐ tion of the file that is skipped is copied to standard output. 実世界の有用性に懐疑的だったので、試してみることにしました。やった: seq -s'foo bar ' 1000000 >file ...次のような100万行のデータの場合: 1foo bar ... 999999foo bar 1000000 …

2
条件付きで「時間」を通じてサブシェルを渡すにはどうすればよいですか?
Vagrantボックスのセットアップスクリプトがあります。これは、でシングルステップを測定するために使用していましたtime。次に、時間測定を条件付きで有効または無効にしたいと思います。 たとえば、以前の行は次のようになります。 time (apt-get update > /tmp/last.log 2>&1) 今、私は単にこのようなことをすることができると思いました: MEASURE_TIME=true [[ $MEASURE_TIME = true ]] && TIME="time --format=%e" || TIME="" $TIME (apt-get update > /tmp/last.log 2>&1) しかし、これはうまくいきません: syntax error near unexpected token `apt-get' `$TIME (apt-get update > /tmp/last.log 2>&1)' ここの問題は何ですか?
9 bash  shell  quoting  time 

5
cdコマンドにフックできますか?
実行しているサーバーに何かをセットアップしようとしcdていpublic_htmlます。常に95%の時間フォルダーに移動すると、特定のことを確認するために常に実行するコマンドがいくつかあります。 とにかくフックすることができるcdので、ディレクトリがの場合、public_html自動的にコマンドが実行されますか? cdコマンドにフックできない場合、私が望んでいる結果を達成するために他に何かできることはありますか? CentOS 5.8を実行しています。

2
bashおよびzshにおける&& vs&の優先順位
この質問に答えると、bashとの動作に非常に面白い(そして微妙な)違いがあることがわかりましたzsh。 でbash: romano@RRyS:~$ pwd /home/romano romano@RRyS:~$ alias x="cd /bin && ./echo A >/dev/null &" romano@RRyS:~$ x [1] 16611 romano@RRyS:~$ pwd /home/romano ご覧のとおり、エイリアスの実行はxサブシェルで実行されるため、現在のディレクトリは変更されません。 にないzsh: [romano:~] % pwd /home/romano [romano:~] % alias x="cd /bin && ./echo A >/dev/null &" [romano:~] % x [1] 16744 [1] + 16744 done ./echo A >/dev/null 1& …
9 bash  shell  zsh 

4
予期しないEOFおよび構文エラー
現在、3度目のシェルスクリプトを書いていて、問題が発生しました。これはこれまでの私のスクリプトです: #!/bin/bash echo "choose one of the following options : \ 1) display all current users \ 2) list all files \ 3) show calendar \ 4) exit script" while read do case in 1) who;; 2) ls -a;; 3) cal;; 4) exit;; esac done スクリプトを実行しようとすると、次のようになります。 line2 : unexpected EOF …

2
シェルパラメータ変数($ 1、…、$ @)をCLIで直接使用することは可能ですか?
場合によっては、上記の変数を小さな例でエミュレートして検証する必要があり、すぐにスクリプトなどにコピーできます。 次の方法で簡単な例を使用して解決しようとしました: (find $1) /tmp sh -c '(find $1) /tmp' sh -c "find $1" /tmp echo '(find $1) /tmp' | sh そして他の組み合わせで。また、シバンインタープリターディレクティブを追加して実験しました#!/bin/sh -xが、望ましい結果が得られませんでした。 これは簡単にできますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.